如何将菜单定制器部分直接移到站点标识下?

时间:2016-07-14 作者:jetyet47

是否可以更改菜单自定义程序部分的优先级,使其直接位于站点标识部分之下?

1 个回复
SO网友:birgire

Update: 我很好奇,只是在这个网站上搜索get_panel 方法,这似乎是获取和修改面板实例的方法。E、 g.这个问题"How to access the nav_menus panel with the customizer api?" 似乎相关。WestonRuter确实更改了菜单面板的优先级,但没有应用add_panel() 并使用$wp_customize 实例作为customize_register 回调。我刚检查过,事实上它已经传了下来,因为do_action( \'customize_register\', $this ); 在里面WP_Customize_Manager::wp_loaded(). 之前我看过:

add_action( \'customize_register\', array( $this, \'register_controls\' ) );
其中:

/**
 * Register some default controls.
 *
 * @since 3.4.0
 */
 public function register_controls() {
没有输入参数。

因此,我通过删除add_panel() 通过使用$wp_customize 作为的输入参数customize_register 回调,而不是function() use ( &$wp_customize ).

我深入研究了Customizer类并测试了各种东西。这种方法似乎有效:

/**
 * Change priority and title for the \'Menus\' panel in the Customizer
 */
add_action( \'customize_register\', function( \\WP_Customize_Manager $wp_customize )
{
    // Get the \'Menus\' panel instance
    $mypanel = $wp_customize->get_panel( \'nav_menus\');

    if( $mypanel instanceof \\WP_Customize_Nav_Menus_Panel )
    {
        // Adjust to your needs:
        $mypanel ->priority = 21;    
        $mypanel ->title    = \'My Great Menus!\';
    }

}, 12 );
但我不知道人们通常是如何做到这一点的,也不知道这是否是一种方式;-)

我们在这里使用优先级21,因为站点标识部分的优先级为20。

在我们的例子中,我们有一个面板,不是部分,而是在WP_Customize_Manager::prepare_controls() 各部分和面板通过优先顺序进行组合和排序usortWP_Customize_Manager::_cmp_priority().

在这里,我们可以看到变化:

add_action( \'customize_register\', array( $this, \'register_controls\' ) );
After:

after

通过获取站点标识部分的优先级,我们可以使其更具动态性:

/**
 * Change priority and title for the \'Menus\' panel in the Customizer
 */
add_action( \'customize_register\', function( \\WP_Customize_Manager $wp_customize )
{
    // Get the \'Menus\' panel instance
    $mypanel   = $wp_customize->get_panel( \'nav_menus\' );

    // Get the \'Site Identity\' section instance
    $mysection = $wp_customize->get_section( \'title_tagline\' );

    if( 
            $mypanel instanceof \\WP_Customize_Nav_Menus_Panel 
        &&  $mysection instanceof \\WP_Customize_Section
    ) {
        // Adjust to your needs
        $mypanel->priority = $mysection->priority + 1;
        $mypanel->title    = \'My Great Menus!\';    
    }

}, 12 );

相关推荐