WP_Customize_Manager::prepare_controls()

In this article

Prepares panels, sections, and controls.

Description

For each, check if required related components exist, whether the user has the necessary capabilities, and sort by priority.

Source

public function prepare_controls() {

	$controls       = array();
	$this->controls = wp_list_sort(
		$this->controls,
		array(
			'priority'        => 'ASC',
			'instance_number' => 'ASC',
		),
		'ASC',
		true
	);

	foreach ( $this->controls as $id => $control ) {
		if ( ! isset( $this->sections[ $control->section ] ) || ! $control->check_capabilities() ) {
			continue;
		}

		$this->sections[ $control->section ]->controls[] = $control;
		$controls[ $id ]                                 = $control;
	}
	$this->controls = $controls;

	// Prepare sections.
	$this->sections = wp_list_sort(
		$this->sections,
		array(
			'priority'        => 'ASC',
			'instance_number' => 'ASC',
		),
		'ASC',
		true
	);
	$sections       = array();

	foreach ( $this->sections as $section ) {
		if ( ! $section->check_capabilities() ) {
			continue;
		}

		$section->controls = wp_list_sort(
			$section->controls,
			array(
				'priority'        => 'ASC',
				'instance_number' => 'ASC',
			)
		);

		if ( ! $section->panel ) {
			// Top-level section.
			$sections[ $section->id ] = $section;
		} else {
			// This section belongs to a panel.
			if ( isset( $this->panels [ $section->panel ] ) ) {
				$this->panels[ $section->panel ]->sections[ $section->id ] = $section;
			}
		}
	}
	$this->sections = $sections;

	// Prepare panels.
	$this->panels = wp_list_sort(
		$this->panels,
		array(
			'priority'        => 'ASC',
			'instance_number' => 'ASC',
		),
		'ASC',
		true
	);
	$panels       = array();

	foreach ( $this->panels as $panel ) {
		if ( ! $panel->check_capabilities() ) {
			continue;
		}

		$panel->sections      = wp_list_sort(
			$panel->sections,
			array(
				'priority'        => 'ASC',
				'instance_number' => 'ASC',
			),
			'ASC',
			true
		);
		$panels[ $panel->id ] = $panel;
	}
	$this->panels = $panels;

	// Sort panels and top-level sections together.
	$this->containers = array_merge( $this->panels, $this->sections );
	$this->containers = wp_list_sort(
		$this->containers,
		array(
			'priority'        => 'ASC',
			'instance_number' => 'ASC',
		),
		'ASC',
		true
	);
}

Changelog

VersionDescription
3.4.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.