Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
46 / 46 |
WP_Customize_Section | |
100.00% |
1 / 1 |
|
100.00% |
10 / 10 |
19 | |
100.00% |
46 / 46 |
__construct | |
100.00% |
1 / 1 |
4 | |
100.00% |
15 / 15 |
|||
active | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
active_callback | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
json | |
100.00% |
1 / 1 |
2 | |
100.00% |
10 / 10 |
|||
check_capabilities | |
100.00% |
1 / 1 |
5 | |
100.00% |
5 / 5 |
|||
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% |
0 / 0 |
|||
print_template | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
render_template | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
<?php | |
/** | |
* WordPress Customize Section classes | |
* | |
* @package WordPress | |
* @subpackage Customize | |
* @since 3.4.0 | |
*/ | |
/** | |
* Customize Section class. | |
* | |
* A UI container for controls, managed by the WP_Customize_Manager class. | |
* | |
* @since 3.4.0 | |
* | |
* @see WP_Customize_Manager | |
*/ | |
class WP_Customize_Section { | |
/** | |
* 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; | |
/** | |
* WP_Customize_Manager instance. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var WP_Customize_Manager | |
*/ | |
public $manager; | |
/** | |
* Unique identifier. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var string | |
*/ | |
public $id; | |
/** | |
* Priority of the section which informs load order of sections. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var integer | |
*/ | |
public $priority = 160; | |
/** | |
* Panel in which to show the section, making it a sub-section. | |
* | |
* @since 4.0.0 | |
* @access public | |
* @var string | |
*/ | |
public $panel = ''; | |
/** | |
* Capability required for the section. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var string | |
*/ | |
public $capability = 'edit_theme_options'; | |
/** | |
* Theme feature support for the section. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var string|array | |
*/ | |
public $theme_supports = ''; | |
/** | |
* Title of the section to show in UI. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var string | |
*/ | |
public $title = ''; | |
/** | |
* Description to show in the UI. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var string | |
*/ | |
public $description = ''; | |
/** | |
* Customizer controls for this section. | |
* | |
* @since 3.4.0 | |
* @access public | |
* @var array | |
*/ | |
public $controls; | |
/** | |
* Type of this section. | |
* | |
* @since 4.1.0 | |
* @access public | |
* @var string | |
*/ | |
public $type = 'default'; | |
/** | |
* Active callback. | |
* | |
* @since 4.1.0 | |
* @access public | |
* | |
* @see WP_Customize_Section::active() | |
* | |
* @var callable Callback is called with one argument, the instance of | |
* {@see WP_Customize_Section}, and returns bool to indicate | |
* whether the section is active (such as it relates to the URL | |
* currently being previewed). | |
*/ | |
public $active_callback = ''; | |
/** | |
* Constructor. | |
* | |
* Any supplied $args override class property defaults. | |
* | |
* @since 3.4.0 | |
* | |
* @param WP_Customize_Manager $manager Customizer bootstrap instance. | |
* @param string $id An specific ID of the section. | |
* @param array $args Section arguments. | |
*/ | |
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; | |
$this->controls = array(); // Users cannot customize the $controls array. | |
} | |
/** | |
* Check whether section is active to current Customizer preview. | |
* | |
* @since 4.1.0 | |
* @access public | |
* | |
* @return bool Whether the section is active to the current preview. | |
*/ | |
final public function active() { | |
$section = $this; | |
$active = call_user_func( $this->active_callback, $this ); | |
/** | |
* Filter response of {@see WP_Customize_Section::active()}. | |
* | |
* @since 4.1.0 | |
* | |
* @param bool $active Whether the Customizer section is active. | |
* @param WP_Customize_Section $section {@see WP_Customize_Section} instance. | |
*/ | |
$active = apply_filters( 'customize_section_active', $active, $section ); | |
return $active; | |
} | |
/** | |
* Default callback used when invoking {@see WP_Customize_Section::active()}. | |
* | |
* Subclasses can override this with their specific logic, or they may provide | |
* an 'active_callback' argument to the constructor. | |
* | |
* @since 4.1.0 | |
* @access public | |
* | |
* @return true Always true. | |
*/ | |
public function active_callback() { | |
return true; | |
} | |
/** | |
* Gather the parameters passed to client JavaScript via JSON. | |
* | |
* @since 4.1.0 | |
* | |
* @return array The array to be exported to the client as JSON. | |
*/ | |
public function json() { | |
$array = wp_array_slice_assoc( (array) $this, array( 'id', 'description', 'priority', 'panel', 'type' ) ); | |
$array['title'] = html_entity_decode( $this->title, ENT_QUOTES, get_bloginfo( 'charset' ) ); | |
$array['content'] = $this->get_content(); | |
$array['active'] = $this->active(); | |
$array['instanceNumber'] = $this->instance_number; | |
if ( $this->panel ) { | |
/* translators: ▸ is the unicode right-pointing triangle, and %s is the section title in the Customizer */ | |
$array['customizeAction'] = sprintf( __( 'Customizing ▸ %s' ), esc_html( $this->manager->get_panel( $this->panel )->title ) ); | |
} else { | |
$array['customizeAction'] = __( 'Customizing' ); | |
} | |
return $array; | |
} | |
/** | |
* Checks required user capabilities and whether the theme has the | |
* feature support required by the section. | |
* | |
* @since 3.4.0 | |
* | |
* @return bool False if theme doesn't support the section or user doesn't have the capability. | |
*/ | |
final public function check_capabilities() { | |
if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) { | |
return false; | |
} | |
if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) { | |
return false; | |
} | |
return true; | |
} | |
/** | |
* Get the section's content for insertion into the Customizer pane. | |
* | |
* @since 4.1.0 | |
* | |
* @return string Contents of the section. | |
*/ | |
final public function get_content() { | |
ob_start(); | |
$this->maybe_render(); | |
return trim( ob_get_clean() ); | |
} | |
/** | |
* Check capabilities and render the section. | |
* | |
* @since 3.4.0 | |
*/ | |
final public function maybe_render() { | |
if ( ! $this->check_capabilities() ) { | |
return; | |
} | |
/** | |
* Fires before rendering a Customizer section. | |
* | |
* @since 3.4.0 | |
* | |
* @param WP_Customize_Section $this WP_Customize_Section instance. | |
*/ | |
do_action( 'customize_render_section', $this ); | |
/** | |
* Fires before rendering a specific Customizer section. | |
* | |
* The dynamic portion of the hook name, `$this->id`, refers to the ID | |
* of the specific Customizer section to be rendered. | |
* | |
* @since 3.4.0 | |
*/ | |
do_action( "customize_render_section_{$this->id}" ); | |
$this->render(); | |
} | |
/** | |
* Render the section UI in a subclass. | |
* | |
* Sections are now rendered in JS by default, see {@see WP_Customize_Section::print_template()}. | |
* | |
* @since 3.4.0 | |
*/ | |
protected function render() {} | |
/** | |
* Render the section's JS template. | |
* | |
* This function is only run for section types that have been registered with | |
* WP_Customize_Manager::register_section_type(). | |
* | |
* @since 4.3.0 | |
* @access public | |
* | |
* @see WP_Customize_Manager::render_template() | |
*/ | |
public function print_template() { | |
?> | |
<script type="text/html" id="tmpl-customize-section-<?php echo $this->type; ?>"> | |
<?php $this->render_template(); ?> | |
</script> | |
<?php | |
} | |
/** | |
* An Underscore (JS) template for rendering this section. | |
* | |
* Class variables for this section class are available in the `data` JS object; | |
* export custom variables by overriding WP_Customize_Section::json(). | |
* | |
* @since 4.3.0 | |
* @access protected | |
* | |
* @see WP_Customize_Section::print_template() | |
*/ | |
protected function render_template() { | |
?> | |
<li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}"> | |
<h3 class="accordion-section-title" tabindex="0"> | |
{{ data.title }} | |
<span class="screen-reader-text"><?php _e( 'Press return or enter to open this section' ); ?></span> | |
</h3> | |
<ul class="accordion-section-content"> | |
<li class="customize-section-description-container"> | |
<div class="customize-section-title"> | |
<button class="customize-section-back" tabindex="-1"> | |
<span class="screen-reader-text"><?php _e( 'Back' ); ?></span> | |
</button> | |
<h3> | |
<span class="customize-action"> | |
{{{ data.customizeAction }}} | |
</span> | |
{{ data.title }} | |
</h3> | |
</div> | |
<# if ( data.description ) { #> | |
<div class="description customize-section-description"> | |
{{{ data.description }}} | |
</div> | |
<# } #> | |
</li> | |
</ul> | |
</li> | |
<?php | |
} | |
} | |
/** WP_Customize_Themes_Section class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-themes-section.php' ); | |
/** WP_Customize_Sidebar_Section class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-sidebar-section.php' ); | |
/** WP_Customize_Nav_Menu_Section class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-nav-menu-section.php' ); | |
/** WP_Customize_New_Menu_Section class */ | |
require_once( ABSPATH . WPINC . '/customize/class-wp-customize-new-menu-section.php' ); |