WP_Customize_Manager::prepare_controls()

Prepare 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

File: wp-includes/class-wp-customize-manager.php

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

Version Description
3.4.0 Introduced.

© 2003–2021 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_customize_manager/prepare_controls