WP_Customize_Manager::add_panel( WP_Customize_Panel|string $id, array $args = array() ): WP_Customize_Panel

Adds a customize panel.


Top ↑

See also

Top ↑


$id WP_Customize_Panel|string Required
Customize Panel object, or ID.
$args array Optional
Array of properties for the new Panel object.
See WP_Customize_Panel::__construct() for information on accepted arguments.
More Arguments from WP_Customize_Panel::__construct( ... $args ) Array of properties for the new Panel object.
  • priority int
    Priority of the panel, defining the display order of panels and sections. Default 160.
  • capability string
    Capability required for the panel.
    Default edit_theme_options.
  • theme_supports mixed[]
    Theme features required to support the panel.
  • title string
    Title of the panel to show in UI.
  • description string
    Description to show in the UI.
  • type string
    Type of the panel.
  • active_callback callable
    Active callback.

Default: array()

Top ↑


WP_Customize_Panel The instance of the panel that was added.

Top ↑


File: wp-includes/class-wp-customize-manager.php. View all references

public function add_panel( $id, $args = array() ) {
	if ( $id instanceof WP_Customize_Panel ) {
		$panel = $id;
	} else {
		$panel = new WP_Customize_Panel( $this, $id, $args );

	$this->panels[ $panel->id ] = $panel;
	return $panel;

Top ↑


Version Description
4.5.0 Return added WP_Customize_Panel instance.
4.0.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 2 content
    Contributed by Ben

    If you are wondering why your panel is visible but disappears after the customizer is fully loaded, it is probably because you added the ‘customizer_register’ action only when is_admin() is true.

    Do this instead:

    if ( is_admin() || is_customize_preview() ) {
        add_action( 'customize_register', 'wpdocs_your_customize_register' );

    Now your panel will not be hidden when the customizer is fully loaded.

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