=' ) ) { $wp_customize->add_panel( 'sidebars', array( 'priority' => 107, 'title' => __( 'Sidebars', 'aladdin' ), 'description' => __( 'In this section you can add or remove sidebars for particular pages.', 'aladdin' ), ) ); } $section_priority = 10; foreach( $defaults['defined_sidebars'] as $sidebar_type_id => $sidebar_type) { if( 'static' == $sidebar_type_id ) continue; $wp_customize->add_section( $sidebar_type_id, array( 'priority' => $section_priority++, 'title' => $sidebar_type['title'], 'description' => ($sidebar_type_id != 'default' ? __( 'You can add custom sidebars for the page(s) "', 'aladdin' ) . $sidebar_type['title'] . __( '" by selecting options in this section. Default sidebars won\'t be shown on this page(s).', 'aladdin' ) : __( 'Default sidebars for all pages, post and custom post types.', 'aladdin' )), 'panel' => 'sidebars', ) ); $priority = 1; //theme mod names: $defaults['defined_sidebars'][$x] $wp_customize->add_setting( $sidebar_type_id, array( 'type' => 'theme_mod', 'default' => $sidebar_type['use'], 'capability' => 'edit_theme_options', 'sanitize_callback' => 'aladdin_sanitize_checkbox' ) ); if( 'default' == $sidebar_type_id) $message = __( 'Register default sidebars for all pages', 'aladdin'); else $message = __( 'Override default sidebars by custom sidebars on ', 'aladdin' ) . $sidebar_type['title'] . __( ' (must be checked). Please, choose sidebars which you want to use on this page.', 'aladdin' ); $wp_customize->add_control( $sidebar_type_id, array( 'label' => $message, 'section' => $sidebar_type_id, 'settings' => $sidebar_type_id, 'type' => 'checkbox', 'priority' => $priority++, ) ); //theme mod names: $defaults['theme_sidebars'][$x]['slug']_$defaults['defined_sidebars'][$x] foreach( $defaults['theme_sidebars'] as $slug => $sidebars ) { if($sidebars['is_constant'] != '1') { $wp_customize->add_setting( $slug.'_'.$sidebar_type_id, array( 'type' => 'theme_mod', 'default' => $sidebar_type[$slug], 'capability' => 'edit_theme_options', 'sanitize_callback' => 'aladdin_sanitize_checkbox' ) ); $wp_customize->add_control( $slug.'_'.$sidebar_type_id, array( 'label' => $sidebars['title'], 'section' => $sidebar_type_id, 'settings' => $slug.'_'.$sidebar_type_id, 'type' => 'checkbox', 'priority' => $priority++, ) ); } } } /* Create sections for every page with custom sidebars */ $section_priority = 100; $page_sidebars = ( array )get_theme_mod( 'page_sidebars', null); $new_page_sidebars = null; foreach( $page_sidebars as $id => $page_id ) { /* theme mods names: page_[id] - bool [0:1]; $slug_page_[id]*/ $name = 'page_'.$page_id; //delete all theme mods from this section if we don't use it if( '1' != get_theme_mod( $name, null ) ) { remove_theme_mod( $name ); foreach( $defaults['theme_sidebars'] as $slug => $sidebars ) { remove_theme_mod( $slug.'_'.$name ); } } else { $new_page_sidebars[ $id ] = $page_id; $wp_customize->add_section( $name, array( 'priority' => $section_priority++, 'title' => __('Page [', 'aladdin'). get_the_title( $page_id ). ' ('.$page_id.')]', 'description' => __( 'Per page sidebars for the page [', 'aladdin' ). get_the_title( $page_id ). ']', 'panel' => 'sidebars', ) ); $priority = 1; //theme mod names: $defaults['defined_sidebars'][$x] $wp_customize->add_setting( $name, array( 'type' => 'theme_mod', 'default' => '', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'aladdin_sanitize_checkbox' ) ); $wp_customize->add_control( $name, array( 'label' => __( 'Uncheck this mark to remove section and custom sidebars for the page [', 'aladdin' ). get_the_title( $page_id ). ']', 'section' => $name, 'settings' => $name, 'type' => 'checkbox', 'priority' => $priority++, ) ); //theme mod names: $defaults['theme_sidebars'][$x]['slug']_$defaults['defined_sidebars'][$x] foreach( $defaults['theme_sidebars'] as $slug => $sidebars ) { if($sidebars['is_constant'] == '1') continue; $wp_customize->add_setting( $slug.'_'.$name, array( 'type' => 'theme_mod', 'default' => '', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'aladdin_sanitize_checkbox' ) ); $wp_customize->add_control( $slug.'_'.$name, array( 'label' => $sidebars['title'], 'section' => $name, 'settings' => $slug.'_'.$name, 'type' => 'checkbox', 'priority' => $priority++, ) ); } } } //refresh theme mod set_theme_mod( 'page_sidebars', $new_page_sidebars); /* Create 'per page' section */ $wp_customize->add_section( 'sidebars_custom', array( 'priority' => 200, 'title' => __( 'Custom sidebars', 'aladdin' ), 'description' => __( 'In this section you can create a sidebar for a certain page. Select page and press save. Refresh Customizer to see newly added section for that page.', 'aladdin' ), 'panel' => 'sidebars', ) ); $priority = 1; $wp_customize->add_setting( 'pages', array( 'type' => 'page_sidebar', 'default' => '', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'absint' ) ); $wp_customize->add_control( 'pages', array( 'label' => __( 'Select a page and save data. Refresh Customizer to customize new section.', 'aladdin' ), 'section' => 'sidebars_custom', 'settings' => 'pages', 'type' => 'dropdown-pages', 'priority' => $priority++, ) ); } /** * Create theme mods for a new section in the Customizer for the page with id = $value (setting's type: page_sidebar) * * @param $value int page id * @param $setting Customizer setting object * * @since Aladdin 1.0.0 */ function aladdin_save_custom_sidebar( $value ) { //sanitize $value = absint( $value ); if( 0 == $value ) return; if( null === get_post($value) ) return; $defaults = aladdin_get_defaults(); //save page id in array 'page_sidebars' $page_sidebars = ( array )get_theme_mod( 'page_sidebars', null); $new_page_sidebars = null; $page_sidebars[ $value ] = $value; set_theme_mod( 'page_sidebars', $page_sidebars); foreach( $defaults['theme_sidebars'] as $slug => $sidebars ) { if( '1' == $sidebars['is_constant'] ) continue; // theme mod: sidebar-top_page_1 [slug]_page_[id] $name = $slug.'_custom'; set_theme_mod( $slug.'_page_'.$value, ( '1' == $sidebars['is_checked'] ? '1' : '' ) ); } // theme mod: page_[id] set_theme_mod( 'page_'.$value, '1' ); } add_action( 'customize_update_page_sidebar', 'aladdin_save_custom_sidebar' ); /** * Register sidebars and widgetized areas. * * @since Aladdin 1.0.0 */ function aladdin_widgets_init() { $defaults = aladdin_get_defaults(); /* Register Per Page sidebars */ $page_sidebars = ( array )get_theme_mod( 'page_sidebars', null); foreach( $page_sidebars as $id => $page_id ) { /* theme mods names: page_[id] - bool [0:1]; $slug_page_[id]*/ $name = 'page_'.$page_id; //theme mod names: $defaults['theme_sidebars'][$x]['slug']_$defaults['defined_sidebars'][$x] foreach( $defaults['theme_sidebars'] as $slug => $sidebars ) { if( '1' == $sidebars['is_constant'] ) continue; //is this section active? if( '1' != get_theme_mod($name, null) ) continue; //is this sidebar active if( '1' != get_theme_mod($slug.'_'.$name, null ) ) continue; //register sidebar example of the sidebar id: [top-sidebar_page_12] register_sidebar( array( 'name' => __( '[', 'aladdin') . $page_id.__( '] ', 'aladdin') . $sidebars['title'] . ', ' . get_the_title( $page_id ), 'id' => $slug . '-' . $name, 'before_widget' => '", 'before_title' => '