Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
73.33% |
11 / 15 |
CRAP | |
85.94% |
110 / 128 |
WP_Customize_Control | |
0.00% |
0 / 1 |
|
76.47% |
13 / 17 |
63.53 | |
83.78% |
93 / 111 |
__construct | |
100.00% |
1 / 1 |
7 | |
100.00% |
26 / 26 |
|||
enqueue | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
active | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
active_callback | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
value | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
to_json | |
100.00% |
1 / 1 |
2 | |
100.00% |
13 / 13 |
|||
json | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
check_capabilities | |
100.00% |
1 / 1 |
5 | |
100.00% |
8 / 8 |
|||
get_content | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
maybe_render | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
|||
render | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
get_link | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
link | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
input_attrs | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
render_content | |
0.00% |
0 / 1 |
66.42 | |
53.12% |
17 / 32 |
|||
print_template | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
content_template | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
<?php | |
/** | |
* WordPress Customize Control classes | |
* | |
* @package WordPress | |
* @subpackage Customize | |
* @since 3.4.0 | |
*/ | |
/** | |
* Customize Control class. | |
* | |
* @since 3.4.0 | |
*/ | |
class WP_Customize_Control { | |
/** | |
* Incremented with each new class instantiation, then stored in $instance_number. | |
* | |
* Used when sorting two instances whose priorities are equal. | |
* | |
* @since 4.1.0 | |
* | |
* @static | |
* @access protected | |
* @var int | |
*/ | |
protected static $instance_count = 0; | |
/** | |
* Order in which this instance was created in relation to other instances. | |
* | |
* @since 4.1.0 | |
* @access public | |
* @var int | |
*/ | |
public $instance_number; | |
/** | |
* @access public | |
* @var WP_Customize_Manager | |
*/ | |
public $manager; | |
/** | |
* @access public | |
* @var string | |
*/ | |
public $id; | |
/** | |
* All settings tied to the control. | |
* | |
* @access public | |
* @var array | |
*/ | |
public $settings; | |
/** | |
* The primary setting for the control (if there is one). | |
* | |
* @access public | |
* @var string | |
*/ | |
public $setting = 'default'; | |
/** | |
* @access public | |
* @var int | |
*/ | |
public $priority = 10; | |
/** | |
* @access public | |
* @var string | |
*/ | |
public $section = ''; | |
/** | |
* @access public | |
* @var string | |
*/ | |
public $label = ''; | |
/** | |
* @access public | |
* @var string | |
*/ | |
public $description = ''; | |
/** | |
* @todo: Remove choices | |
* | |
* @access public | |
* @var array | |
*/ | |
public $choices = array(); | |
/** | |
* @access public | |
* @var array | |
*/ | |
public $input_attrs = array(); | |
/** | |
* @deprecated It is better to just call the json() method | |
* @access public | |
* @var array | |
*/ | |
public $json = array(); | |
/** | |
* @access public | |
* @var string | |
*/ | |
public $type = 'text'; | |
/** | |
* Callback. | |
* | |
* @since 4.0.0 | |
* @access public | |
* | |
* @see WP_Customize_Control::active() | |
* | |
* @var callable Callback is called with one argument, the instance of | |
* WP_Customize_Control, and returns bool to indicate whether | |
* the control is active (such as it relates to the URL | |
* currently being previewed). | |
*/ | |
public $active_callback = ''; | |
/** | |
* Constructor. | |
* | |
* Supplied $args override class property defaults. | |
* | |
* If $args['settings'] is not defined, use the $id as the setting ID. | |
* | |
* @since 3.4.0 | |
* | |
* @param WP_Customize_Manager $manager Customizer bootstrap instance. | |
* @param string $id Control ID. | |
* @param array $args Optional. Arguments to override class property defaults. | |
*/ | |
public function __construct( $manager, $id, $args = array() ) { | |
$keys = array_keys( get_object_vars( $this ) ); | |
foreach ( $keys as $key ) { | |
if ( isset( $args[ $key ] ) ) { | |
$this->$key = $args[ $key ]; | |
} | |
} | |
$this->manager = $manager; | |
$this->id = $id; | |
if ( empty( $this->active_callback ) ) { | |
$this->active_callback = array( $this, 'active_callback' ); | |
} | |
self::$instance_count += 1; | |
$this->instance_number = self::$instance_count; | |
// Process settings. | |
if ( empty( $this->settings ) ) { | |
$this->settings = $id; | |
} | |
$settings = array(); | |
if ( is_array( $this->settings ) ) { | |
foreach ( $this->settings as $key => $setting ) { | |
$settings[ $key ] = $this->manager->get_setting( $setting ); | |
} | |
} else { | |
$this->setting = $this->manager->get_setting( $this->settings ); | |
$settings['default'] = $this->setting; | |
} | |
$this->settings = $settings; | |
} | |
/** | |
* Enqueue control related scripts/styles. | |
* | |
* @since 3.4.0 | |
*/ | |
public function enqueue() {} | |
/** | |
* Check whether control is active to current Customizer preview. | |
* | |
* @since 4.0.0 | |
* @access public | |
* | |
* @return bool Whether the control is active to the current preview. | |
*/ | |
final public function active() { | |
$control = $this; | |
$active = call_user_func( $this->active_callback, $this ); | |
/** | |
* Filter response of WP_Customize_Control::active(). | |
* | |
* @since 4.0.0 | |
* | |
* @param bool $active Whether the Customizer control is active. | |
* @param WP_Customize_Control $control WP_Customize_Control instance. | |
*/ | |
$active = apply_filters( 'customize_control_active', $active, $control ); | |
return $active; | |
} | |
/** | |
* Default callback used when invoking WP_Customize_Control::active(). | |
* | |
* Subclasses can override this with their specific logic, or they may | |
* provide an 'active_callback' argument to the constructor. | |
* | |
* @since 4.0.0 | |
* @access public | |
* | |
* @return true Always true. | |
*/ | |
public function active_callback() { | |
return true; | |
} | |
/** | |
* Fetch a setting's value. | |
* Grabs the main setting by default. | |
* | |
* @since 3.4.0 | |
* | |
* @param string $setting_key | |
* @return mixed The requested setting's value, if the setting exists. | |
*/ | |
final public function value( $setting_key = 'default' ) { | |
if ( isset( $this->settings[ $setting_key ] ) ) { | |
return $this->settings[ $setting_key ]->value(); | |
} | |
} | |
/** | |
* Refresh the parameters passed to the JavaScript via JSON. | |
* | |
* @since 3.4.0 | |
*/ | |
public function to_json() { | |
$this->json['settings'] = array(); | |
foreach ( $this->settings as $key => $setting ) { | |
$this->json['settings'][ $key ] = $setting->id; | |
} | |
$this->json['type'] = $this->type; | |
$this->json['priority'] = $this->priority; | |
$this->json['active'] = $this->active(); | |
$this->json['section'] = $this->section; | |
$this->json['content'] = $this->get_content(); | |
$this->json['label'] = $this->label; | |
$this->json['description'] = $this->description; | |
$this->json['instanceNumber'] = $this->instance_number; | |
} | |
/** | |
* Get the data to export to the client via JSON. | |
* | |
* @since 4.1.0 | |
* | |
* @return array Array of parameters passed to the JavaScript. | |
*/ | |
public function json() { | |
$this->to_json(); | |
return $this->json; | |
} | |
/** | |
* Check if the theme supports the control and check user capabilities. | |
* | |
* @since 3.4.0 | |
* | |
* @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true. | |
*/ | |
final public function check_capabilities() { | |
foreach ( $this->settings as $setting ) { | |
if ( ! $setting->check_capabilities() ) | |
return false; | |
} | |
$section = $this->manager->get_section( $this->section ); | |
if ( isset( $section ) && ! $section->check_capabilities() ) | |
return false; | |
return true; | |
} | |
/** | |
* Get the control's content for insertion into the Customizer pane. | |
* | |
* @since 4.1.0 | |
* | |
* @return string Contents of the control. | |
*/ | |
final public function get_content() { | |
ob_start(); | |
$this->maybe_render(); | |
return trim( ob_get_clean() ); | |
} | |
/** | |
* Check capabilities and render the control. | |
* | |
* @since 3.4.0 | |
* @uses WP_Customize_Control::render() | |
*/ | |
final public function maybe_render() { | |
if ( ! $this->check_capabilities() ) | |
return; | |
/** | |
* Fires just before the current Customizer control is rendered. | |
* | |
* @since 3.4.0 | |
* | |
* @param WP_Customize_Control $this WP_Customize_Control instance. | |
*/ | |
do_action( 'customize_render_control', $this ); | |
/** | |
* Fires just before a specific Customizer control is rendered. | |
* | |
* The dynamic portion of the hook name, `$this->id`, refers to | |
* the control ID. | |
* | |
* @since 3.4.0 | |
* | |
* @param WP_Customize_Control $this {@see WP_Customize_Control} instance. | |
*/ | |
do_action( 'customize_render_control_' . $this->id, $this ); | |
$this->render(); | |
} | |
/** | |
* Renders the control wrapper and calls $this->render_content() for the internals. | |
* | |
* @since 3.4.0 | |
*/ | |
protected function render() { | |
$id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id ); | |
$class = 'customize-control customize-control-' . $this->type; | |
?><li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>"> | |
<?php $this->render_content(); ?> | |
</li><?php | |
} | |
/** | |
* Get the data link attribute for a setting. | |
* | |
* @since 3.4.0 | |
* | |
* @param string $setting_key | |
* @return string Data link parameter, if $setting_key is a valid setting, empty string otherwise. | |
*/ | |
public function get_link( $setting_key = 'default' ) { | |
if ( ! isset( $this->settings[ $setting_key ] ) ) | |
return ''; | |
return 'data-customize-setting-link="' . esc_attr( $this->settings[ $setting_key ]->id ) . '"'; | |
} | |
/** | |
* Render the data link attribute for the control's input element. | |
* | |
* @since 3.4.0 | |
* @uses WP_Customize_Control::get_link() | |
* | |
* @param string $setting_key | |
*/ | |
public function link( $setting_key = 'default' ) { | |
echo $this->get_link( $setting_key ); | |
} | |
/** | |
* Render the custom attributes for the control's input element. | |
* | |
* @since 4.0.0 | |
* @access public | |
*/ | |
public function input_attrs() { | |
foreach ( $this->input_attrs as $attr => $value ) { | |
echo $attr . '="' . esc_attr( $value ) . '" '; | |
} | |
} | |
/** | |
* Render the control's content. | |
* | |
* Allows the content to be overriden without having to rewrite the wrapper in $this->render(). | |
* | |
* Supports basic input types `text`, `checkbox`, `textarea`, `radio`, `select` and `dropdown-pages`. | |
* Additional input types such as `email`, `url`, `number`, `hidden` and `date` are supported implicitly. | |
* | |
* Control content can alternately be rendered in JS. See {@see WP_Customize_Control::print_template()}. | |
* | |
* @since 3.4.0 | |
*/ | |
protected function render_content() { | |
switch( $this->type ) { | |
case 'checkbox': | |
?> | |
<label> | |
<input type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> /> | |
<?php echo esc_html( $this->label ); ?> | |
<?php if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description; ?></span> | |
<?php endif; ?> | |
</label> | |
<?php | |
break; | |
case 'radio': | |
if ( empty( $this->choices ) ) | |
return; | |
$name = '_customize-radio-' . $this->id; | |
if ( ! empty( $this->label ) ) : ?> | |
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> | |
<?php endif; | |
if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description ; ?></span> | |
<?php endif; | |
foreach ( $this->choices as $value => $label ) : | |
?> | |
<label> | |
<input type="radio" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $name ); ?>" <?php $this->link(); checked( $this->value(), $value ); ?> /> | |
<?php echo esc_html( $label ); ?><br/> | |
</label> | |
<?php | |
endforeach; | |
break; | |
case 'select': | |
if ( empty( $this->choices ) ) | |
return; | |
?> | |
<label> | |
<?php if ( ! empty( $this->label ) ) : ?> | |
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> | |
<?php endif; | |
if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description; ?></span> | |
<?php endif; ?> | |
<select <?php $this->link(); ?>> | |
<?php | |
foreach ( $this->choices as $value => $label ) | |
echo '<option value="' . esc_attr( $value ) . '"' . selected( $this->value(), $value, false ) . '>' . $label . '</option>'; | |
?> | |
</select> | |
</label> | |
<?php | |
break; | |
case 'textarea': | |
?> | |
<label> | |
<?php if ( ! empty( $this->label ) ) : ?> | |
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> | |
<?php endif; | |
if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description; ?></span> | |
<?php endif; ?> | |
<textarea rows="5" <?php $this->link(); ?>><?php echo esc_textarea( $this->value() ); ?></textarea> | |
</label> | |
<?php | |
break; | |
case 'dropdown-pages': | |
?> | |
<label> | |
<?php if ( ! empty( $this->label ) ) : ?> | |
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> | |
<?php endif; | |
if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description; ?></span> | |
<?php endif; ?> | |
<?php $dropdown = wp_dropdown_pages( | |
array( | |
'name' => '_customize-dropdown-pages-' . $this->id, | |
'echo' => 0, | |
'show_option_none' => __( '— Select —' ), | |
'option_none_value' => '0', | |
'selected' => $this->value(), | |
) | |
); | |
// Hackily add in the data link parameter. | |
$dropdown = str_replace( '<select', '<select ' . $this->get_link(), $dropdown ); | |
echo $dropdown; | |
?> | |
</label> | |
<?php | |
break; | |
default: | |
?> | |
<label> | |
<?php if ( ! empty( $this->label ) ) : ?> | |
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> | |
<?php endif; | |
if ( ! empty( $this->description ) ) : ?> | |
<span class="description customize-control-description"><?php echo $this->description; ?></span> | |
<?php endif; ?> | |
<input type="<?php echo esc_attr( $this->type ); ?>" <?php $this->input_attrs(); ?> value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> /> | |
</label> | |
<?php | |
break; | |
} | |
} | |
/** | |
* Render the control's JS template. | |
* | |
* This function is only run for control types that have been registered with | |
* {@see WP_Customize_Manager::register_control_type()}. | |
* | |
* In the future, this will also print the template for the control's container | |
* element and be override-able. | |
* | |
* @since 4.1.0 | |
*/ | |
final public function print_template() { | |
?> | |
<script type="text/html" id="tmpl-customize-control-<?php echo $this->type; ?>-content"> | |
<?php $this->content_template(); ?> | |
</script> | |
<?php | |
} | |
/** | |
* An Underscore (JS) template for this control's content (but not its container). | |
* | |
* Class variables for this control class are available in the `data` JS object; | |
* export custom variables by overriding {@see WP_Customize_Control::to_json()}. | |
* | |
* @see WP_Customize_Control::print_template() | |
* | |
* @since 4.1.0 | |
*/ | |
protected function content_template() {} | |
} | |
/** WP_Customize_Color_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-color-control.php' ); | |
/** WP_Customize_Media_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-media-control.php' ); | |
/** WP_Customize_Upload_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-upload-control.php' ); | |
/** WP_Customize_Image_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-image-control.php' ); | |
/** WP_Customize_Background_Image_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-background-image-control.php' ); | |
/** WP_Customize_Cropped_Image_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-cropped-image-control.php' ); | |
/** WP_Customize_Site_Icon_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-site-icon-control.php' ); | |
/** WP_Customize_Header_Image_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-header-image-control.php' ); | |
/** WP_Customize_Theme_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-theme-control.php' ); | |
/** WP_Widget_Area_Customize_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-widget-area-customize-control.php' ); | |
/** WP_Widget_Form_Customize_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-widget-form-customize-control.php' ); | |
/** WP_Customize_Nav_Menu_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-control.php' ); | |
/** WP_Customize_Nav_Menu_Item_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-item-control.php' ); | |
/** WP_Customize_Nav_Menu_Location_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-location-control.php' ); | |
/** WP_Customize_Nav_Menu_Name_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-name-control.php' ); | |
/** WP_Customize_Nav_Menu_Auto_Add_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-auto-add-control.php' ); | |
/** WP_Customize_New_Menu_Control class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-new-menu-control.php' ); |