WordPress Customizer:一个控件上怎么可能有多个活动的回调?

时间:2017-07-05 作者:Troy Templeman

我有以下两个自定义控件,它们显示用于显示/隐藏内容的复选框。每个复选框后面都有一个active_callback 选中/取消选中复选框时显示/隐藏相应控件的。

// Display About Block Button
$wp_customize->add_setting( \'display_about_block_button\', array(
    \'default\'           => true
) );
$wp_customize->add_control( \'display_about_block_button\', array(
    \'label\'             => __( \'Display About Button\', \'my_theme_name\' ),
    \'type\'              => \'checkbox\',
    \'section\'           => \'about\',
    \'active_callback\'   => \'display_about_block_callback\'
) );
function display_about_block_button_callback( $control ) {
    if ( $control->manager->get_setting( \'display_about_block_button\' )->value() == true ) {
        return true;
    } else {
        return false;
    }
}

// Display About Block
$wp_customize->add_setting( \'display_about_block\', array(
    \'default\'           => true
) );
$wp_customize->add_control( \'display_about_block\', array(
    \'label\'             => __( \'Display About Block\', \'my_theme_name\' ),
    \'type\'              => \'checkbox\',
    \'section\'           => \'about\'
) );
function display_about_block_callback( $control ) {
    if ( $control->manager->get_setting( \'display_about_block\' )->value() == true ) {
        return true;
    } else {
        return false;
    }
}
除了问题是About Block Button 下面是About Block. 我希望能够隐藏About Block Button 如果About Block 显示,但也可以隐藏About Block Button 如果About Block 完全隐藏(无需选中两个框)。因此,它需要两个active_callback\'是这样的:

// About Block Button Text
$wp_customize->add_setting( \'about_block_button_text\', array(
    \'default\'           => __( \'Read More\', \'my_theme_name\' )
) );    
$wp_customize->add_control( \'about_block_button_text\', array(
    \'label\'             => __( \'About Button Text\', \'my_theme_name\' ),
    \'type\'              => \'text\',
    \'section\'           => \'about\',
    \'active_callback\'   => \'display_about_block_button_callback\',
    \'active_callback\'   => \'display_about_block_callback\'
) );
不幸的是,这两者都不能接受active_callback\'s、 如何在一个控件上有两个(或可能更多)活动回调?

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

您可以创建第三个只引用两个现有回调函数的活动回调函数,例如通过匿名函数(PHP≥5.3):

// About Block Button Text
$wp_customize->add_setting( \'about_block_button_text\', array(
    \'default\'           => __( \'Read More\', \'my_theme_name\' )
) );    
$wp_customize->add_control( \'about_block_button_text\', array(
    \'label\'             => __( \'About Button Text\', \'my_theme_name\' ),
    \'type\'              => \'text\',
    \'section\'           => \'about\',
    \'active_callback\'   => function( $control ) {
        return ( 
            display_about_block_button_callback( $control )
            &&
            display_about_block_callback( $control )
        );
    },
) );

结束

相关推荐

Admin-ajax.php在子域上无法正常工作

我试图将产品价格(从数据库中提取)乘以cookie存储的货币,对应于切换语言。为了实现这一点,我使用了AJAX脚本和几种方法。问题在于方法currencyRates();尽管在测试环境中,一切都很正常(我使用的是子文件夹而不是子域),但在生产级方法上currencyRates(); 只是返回值1(在方法开始时初始化,当var_dump $rate 在foreach循环中,它给了我期望的值,但当我尝试返回时,它总是在开始变量处初始化的值$rate = 1). 发生了什么事?子域如何影响这种类型的脚本?数据库