如何将主题定制控件添加到特定页面?

时间:2018-04-15 作者:Александр Чи

我想要的是:

if (is_post_type_archive(\'my_post_type\')) {
    $wp_customize->add_section(...);
    $wp_customize->add_setting(...);
    $wp_customize->add_control(...);
}
我已经看到过类似的问题(Adding Controls to Theme Customizer If Certain Page Template is Active), 参考Wordpress 4.0,可以使用此设置。现在是Wordpress 4.9,这还没有包括在内。

此外,我已经读到,我不能这样做,因为当自定义程序注册时,仍然没有对象$wp_query. 那么,我该如何记录这种行为呢?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

可以定义一个回调函数,用于确定控件是否可见。它的使用方式与函数在action和filter挂钩中的使用方式相同,但您将其用作active_callback 控件的。

例如,仅在以下情况下显示控件is_front_page() 是真的,请这样使用:

$wp_customize->add_control( \'front_page_greeting\', array(
    \'label\'           => __( \'Greeting\' ),
    \'section\'         => \'title_tagline\',
    \'active_callback\' => \'is_front_page\',
) );
如果需要向函数传递参数,请在用作回调的匿名函数中使用该函数:

$wp_customize->add_control( \'front_page_greeting\', array(
    \'label\'           => __( \'Greeting\' ),
    \'section\'         => \'title_tagline\',
    \'active_callback\' => function() {
        return is_post_type_archive( \'my_post_page\' );
    },
) );
或单独定义:

function wpse_300815_is_my_post_page() {
    return is_post_type_archive( \'my_post_page\' );
}
然后按名称使用:

$wp_customize->add_control( \'front_page_greeting\', array(
    \'label\'           => __( \'Greeting\' ),
    \'section\'         => \'title_tagline\',
    \'active_callback\' => \'wpse_300815_is_my_post_page\',
) );

结束

相关推荐