Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.19 KB | None | 0 0
  1. class Multiplebusiness_Customizer{
  2.  
  3.         /**
  4.         * Stores the user supplied form fields
  5.         *
  6.         * @since  Multiple Business 1.0.0
  7.         * @access public
  8.         * @var    array
  9.         */
  10.         public $fields = array();
  11.  
  12.         /**
  13.         * Stores the wp_customize object for later use inside the class
  14.         *
  15.         * @since  Multiple Business 1.0.0
  16.         * @access protected
  17.         * @var    object
  18.         */
  19.         protected $customize;
  20.  
  21.         /**
  22.         * Stores all the user's sections
  23.         *
  24.         * @since  Multiple Business 1.0.0
  25.         * @access protected
  26.         * @var    array
  27.         */
  28.         protected $sections = array();
  29.  
  30.         # Some Default sections ids in WordPress
  31.         # 'title_tagline',
  32.         # 'colors',
  33.         # 'header_image',
  34.         # 'background_image',
  35.         # 'nav',
  36.         # 'static_front_page'
  37.  
  38.         /**
  39.         * Stores all the user's panels
  40.         *
  41.         * @since  Multiple Business 1.0.0
  42.         * @access protected
  43.         * @var    array
  44.         */
  45.         protected $panels = array();
  46.  
  47.         /**
  48.         * Stores all the default values
  49.         *
  50.         * @since  Multiple Business 1.0.0
  51.         * @access public
  52.         * @var    array
  53.         */
  54.         public $defaults = array();
  55.  
  56.         /**
  57.         * Stores class instance
  58.         *
  59.         * @since  Multiple Business 1.0.0
  60.         * @access protected
  61.         * @var    object
  62.         */
  63.         protected static $instance = NULL;
  64.  
  65.  
  66.         /**
  67.         * Retrives the instance of this class
  68.         *
  69.         * @since  Multiple Business 1.0.0
  70.         * @access public
  71.         * @return object
  72.         */
  73.         public static function get_instance() {
  74.  
  75.             if ( ! self::$instance ) {
  76.                 self::$instance = new self();
  77.             }
  78.  
  79.             return self::$instance;
  80.         }
  81.  
  82.         /**
  83.         * Retrives all default values
  84.         *
  85.         * @since  Multiple Business 1.0.0
  86.         * @uses   filter "Multiplebusiness_Customizer_defaults"
  87.         * @access public
  88.         * @return array
  89.         */
  90.         public function get_defaults(){
  91.  
  92.             return apply_filters( 'Multiplebusiness_Customizer_defaults', array() );
  93.         }
  94.  
  95.         /**
  96.         * Retrives value by id
  97.         *
  98.         * @since  Multiple Business 1.0.0
  99.         * @uses   get_defaults()
  100.         * @uses   filter "Multiplebusiness_Customizer_fields"
  101.         * @access public
  102.         * @param  string $id
  103.         * @return string | false
  104.         */
  105.         public function get( $id ){
  106.  
  107.             $fields   = apply_filters( 'Multiplebusiness_Customizer_fields', array() );
  108.             $defaults = self::get_defaults();
  109.  
  110.             if( isset( $defaults[ $id ] ) ){
  111.                 $default = $defaults[ $id ];
  112.             }else{
  113.                 $default = false;
  114.             }
  115.  
  116.             return get_theme_mod( $id, $default );
  117.         }
  118.  
  119.         /**
  120.         * Registers Customizer's panels, sections, controls, settings
  121.         *
  122.         * @since  Multiple Business 1.0.0
  123.         * @uses   add_panels()
  124.         * @uses   add_sections()
  125.         * @uses   add_setting()
  126.         * @uses   add_control()
  127.         * @access public
  128.         * @param  object $wp_customize
  129.         * @return void
  130.         */
  131.         public function register( $wp_customize ){
  132.  
  133.             do_action( 'multiple_business_customize_register', $wp_customize );
  134.  
  135.             $this->customize = $wp_customize;
  136.  
  137.             $this->fields   = apply_filters( 'Multiplebusiness_Customizer_fields', array() );
  138.             $this->panels   = apply_filters( 'Multiplebusiness_Customizer_panels', $this->panels );
  139.             $this->sections = apply_filters( 'Multiplebusiness_Customizer_sections', $this->sections );
  140.  
  141.             $this->defaults = apply_filters( 'Multiplebusiness_Customizer_defaults', $this->defaults );
  142.            
  143.             $this->add_panels();
  144.  
  145.             $this->add_sections();
  146.  
  147.             foreach( $this->fields as $key => $field ){
  148.  
  149.                 $field[ 'id' ] = $key;
  150.  
  151.                 switch ( $field[ 'type' ] ) {
  152.                    
  153.                     case 'url':
  154.  
  155.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  156.                             $field[ 'sanitize_callback' ] = 'esc_url_raw';
  157.                         }
  158.  
  159.                         break;
  160.  
  161.                     case 'email':
  162.  
  163.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  164.                             $field[ 'sanitize_callback' ] = 'sanitize_email';
  165.                         }
  166.  
  167.                         break;
  168.  
  169.                     case 'number':
  170.  
  171.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  172.                             $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_number';
  173.                         }
  174.  
  175.                         break;
  176.  
  177.                     case 'checkbox':
  178.  
  179.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  180.                             $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_checkbox';
  181.                         }
  182.  
  183.                         break;
  184.  
  185.                     case 'text':
  186.  
  187.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  188.                             $field[ 'sanitize_callback' ] = 'sanitize_text_field';
  189.                         }
  190.  
  191.                         break;
  192.                     case 'select': 
  193.                     case 'radio':
  194.  
  195.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  196.                             $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_choice';
  197.                         }
  198.  
  199.                         break;
  200.  
  201.                     case 'textarea':
  202.  
  203.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  204.                             $field[ 'sanitize_callback' ] = 'wp_kses_post';
  205.                         }
  206.                        
  207.                         break;
  208.  
  209.                     case 'colors':
  210.  
  211.                         if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  212.                             $field[ 'sanitize_callback' ] = 'sanitize_hex_color';
  213.                         }
  214.  
  215.                         break;
  216.  
  217.                     case 'dropdown-pages':
  218.                     if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  219.                         $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_dropdown_pages';
  220.                     }
  221.                     break;
  222.                    
  223.                     case 'dropdown-posts':
  224.                     if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  225.                         $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_dropdown_posts';
  226.                     }
  227.                     break;
  228.                        
  229.                     case 'dropdown-categories':
  230.  
  231.                     if( ! isset( $field[ 'sanitize_callback' ] ) || empty( $field[ 'sanitize_callback' ] ) ){
  232.                         $field[ 'sanitize_callback' ] = 'multiple_business_sanitize_dropdown_categories';
  233.                     }
  234.  
  235.                     break;
  236.                 }
  237.  
  238.                 $this->add_setting( $field );
  239.                 $this->add_control( $field );
  240.             }
  241.         }
  242.  
  243.         /**
  244.         * adds Customizer's panels.
  245.         *
  246.         * @since  Multiple Business 1.0.0
  247.         * @access protected
  248.         * @link   https://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_panel
  249.         * @return void
  250.         */
  251.         protected function add_panels(){
  252.  
  253.             foreach ( $this->panels as $id => $panel ) {
  254.  
  255.                 $args = array(
  256.                     'title' => empty( $panel[ 'title' ] ) ? esc_html__( 'No Title Specified.', 'multiple-business' ) : $panel[ 'title' ],
  257.                 );
  258.  
  259.                 if( isset( $panel[ 'description' ] ) ){
  260.                     $args[ 'description' ] = $panel[ 'description' ];
  261.                 }
  262.  
  263.                 if( isset( $panel[ 'priority' ] ) ){
  264.                     $args[ 'priority' ] = $panel[ 'priority' ];
  265.                 }
  266.  
  267.                 if( isset( $panel[ 'active_callback' ] ) ) {
  268.                     $args[ 'active_callback' ] = $panel[ 'active_callback' ];
  269.                 }
  270.  
  271.                 if( isset( $panel[ 'theme_supports' ] ) ) {
  272.                     $args[ 'theme_supports' ] = $panel[ 'theme_supports' ];
  273.                 }
  274.  
  275.                 if( isset( $panel[ 'capability' ] ) ) {
  276.                     $args[ 'capability' ] = $panel[ 'capability' ];
  277.                 }
  278.  
  279.                 $this->customize->add_panel( $id, $args );
  280.             }
  281.         }
  282.  
  283.         /**
  284.         * adds Customizer's sections.
  285.         *
  286.         * @since  Multiple Business 1.0.0
  287.         * @access protected
  288.         * @link   https://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_section
  289.         * @return void
  290.         */
  291.         protected function add_sections(){
  292.  
  293.             foreach ( $this->sections as $id => $section ){
  294.  
  295.                 $args = array(
  296.                     'title' => empty( $section[ 'title' ] ) ? esc_html__( 'No Title Specified.', 'multiple-business' ) : $section[ 'title' ],
  297.                 );
  298.  
  299.                 if( isset( $section[ 'priority' ] ) ){
  300.                     $args[ 'priority' ] = $section[ 'priority' ];
  301.                 }
  302.  
  303.                 if( isset( $section[ 'description' ] ) ){
  304.                     $args[ 'description' ] = $section[ 'description' ];
  305.                 }
  306.  
  307.                 if( isset( $section[ 'active_callback' ] ) ){
  308.                     $args[ 'active_callback' ] = $section[ 'active_callback' ];
  309.                 }
  310.  
  311.                 if( isset( $section[ 'panel' ] ) ){
  312.                     $args[ 'panel' ] = $section[ 'panel' ];
  313.                 }
  314.                
  315.                 $this->customize->add_section( $id, $args );
  316.             }
  317.         }
  318.  
  319.         /**
  320.         * adds Customizer's setting.
  321.         *
  322.         * @since  Multiple Business 1.0.0
  323.         * @access protected
  324.         * @link   https://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_setting
  325.         * @return void
  326.         */
  327.         protected function add_setting( $field ){
  328.  
  329.             $args = array();
  330.  
  331.             if( isset( $this->defaults[ $field[ 'id' ] ] ) )
  332.                 $args[ 'default' ] = $this->defaults[ $field[ 'id' ] ];
  333.             else
  334.                 $args[ 'default' ] = '';
  335.  
  336.             if( isset( $field[ 'setting_type' ] ) || !empty( $field[ 'setting_type' ] ) ){
  337.                 $args[ 'type' ] = $field[ 'setting_type' ];
  338.             }
  339.  
  340.             if( isset( $field[ 'capability' ] ) && !empty( $field[ 'capability' ] ) ){
  341.                 $args[ 'capability' ] = $field[ 'capability' ];
  342.             }
  343.  
  344.             if( isset( $field[ 'theme_supports' ] ) && !empty( $field[ 'theme_supports' ] ) ){
  345.                 $args[ 'theme_supports' ] = $field[ 'theme_supports' ];
  346.             }
  347.  
  348.             if( isset( $field[ 'transport' ] ) || !empty( $field[ 'transport' ] ) ){
  349.                 $args[ 'transport' ] = $field[ 'transport' ];
  350.             }
  351.  
  352.             if( isset( $field[ 'sanitize_callback' ] ) && !empty( $field[ 'sanitize_callback' ] ) ){
  353.                 $args[ 'sanitize_callback' ] = $field[ 'sanitize_callback' ];
  354.             }
  355.  
  356.             if( isset( $field[ 'sanitize_js_callback' ] ) && !empty( $field[ 'sanitize_js_callback' ] ) ){
  357.                 $args[ 'sanitize_js_callback' ] = $field[ 'sanitize_js_callback' ];
  358.             }
  359.            
  360.             $this->customize->add_setting( $field[ 'id' ], $args );
  361.         }
  362.  
  363.         /**
  364.         * adds Customizer's control.
  365.         *
  366.         * @since  Multiple Business 1.0.0
  367.         * @access protected
  368.         * @link   https://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_control
  369.         * @return void
  370.         */
  371.         protected function add_control( $field ){
  372.  
  373.             $args = array();
  374.  
  375.             if( isset( $field[ 'label' ] ) && !empty( $field[ 'label' ] ) ){
  376.                 $args[ 'label' ] = $field[ 'label' ];
  377.             }
  378.  
  379.             if( isset( $field[ 'description' ] ) && !empty( $field[ 'description' ] ) ){
  380.                 $args[ 'description' ] = $field[ 'description' ];
  381.             }
  382.  
  383.             if( isset( $field[ 'section' ] ) && !empty( $field[ 'section' ] ) ){
  384.                 $args[ 'section' ] = $field[ 'section' ];
  385.             }
  386.  
  387.             if( isset( $field[ 'priority' ] ) && !empty( $field[ 'priority' ] ) ){
  388.                 $args[ 'priority' ] = $field[ 'priority' ];
  389.             }
  390.  
  391.             if( isset( $field[ 'active_callback' ] ) ) {
  392.                 $args[ 'active_callback' ] = $field[ 'active_callback' ];
  393.             }
  394.  
  395.             if( isset( $field[ 'settings' ] ) && !empty( $field[ 'settings' ] ) ){
  396.                 $args[ 'settings' ] = $field[ 'settings' ];
  397.             }
  398.  
  399.             if( isset( $field[ 'choices' ] ) && is_array( $field[ 'choices' ] ) ){
  400.                 $args[ 'choices' ] = $field[ 'choices' ];
  401.             }
  402.  
  403.             if( isset( $field[ 'height' ] ) && !empty( $field[ 'height' ] ) ){
  404.                 $args[ 'height' ] = $field[ 'height' ];
  405.             }
  406.  
  407.             if( isset( $field[ 'width' ] ) && !empty( $field[ 'width' ] ) ){
  408.                 $args[ 'width' ] = $field[ 'width' ];
  409.             }
  410.  
  411.             if( isset( $field[ 'input_attrs' ] ) && !empty( $field[ 'input_attrs' ] ) ){
  412.                 $args[ 'input_attrs' ] = $field[ 'input_attrs' ];
  413.             }
  414.  
  415.             $control_id = $field[ 'id' ];
  416.  
  417.             switch( $field[ 'type' ] ){
  418.  
  419.                 case 'colors':
  420.                        
  421.                     unset( $args[ 'type' ] );
  422.  
  423.                     $this->customize->add_control( new WP_Customize_Color_Control(
  424.                         $this->customize,
  425.                         $control_id,
  426.                         $args
  427.                     ));
  428.  
  429.                     break;
  430.  
  431.                 case 'file':
  432.  
  433.                     $this->customize->add_control( new WP_Customize_Upload_Control(
  434.                         $this->customize,
  435.                         $control_id,
  436.                         $args
  437.                     ) );
  438.  
  439.                     break; 
  440.  
  441.                 case 'image':
  442.  
  443.                     $this->customize->add_control( new WP_Customize_Image_Control(
  444.                        $this->customize,
  445.                        $control_id,
  446.                        $args
  447.                     ) );
  448.  
  449.                     break;
  450.  
  451.                 case 'dropdown-categories':
  452.  
  453.                     $this->customize->add_control( new Multiplebusiness_Customize_Category_Control(
  454.                         $this->customize,
  455.                         $control_id,
  456.                         $args
  457.                     ) );
  458.  
  459.                     break;
  460.  
  461.                 case 'dropdown-posts':
  462.  
  463.                     $this->customize->add_control( new Multiplebusiness_Customize_Post_Control(
  464.                         $this->customize,
  465.                         $control_id,
  466.                         $args
  467.                     ) );
  468.  
  469.                     break;
  470.  
  471.                 default:
  472.  
  473.                     if( isset( $field[ 'type' ] ) && !empty( $field[ 'type' ] ) ){
  474.                         $args[ 'type' ] = $field[ 'type' ];
  475.                     }else{
  476.                         $args[ 'type' ] = 'text';
  477.                     }
  478.  
  479.                     $this->customize->add_control( $control_id, $args );
  480.  
  481.                     break;
  482.             }
  483.         }
  484.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement