WP_Customize_Manager:如何获取控件ID

时间:2018-10-12 作者:Rozo

我有这个用于“选择”控制的错误清理功能:

function sanitize_select( $input, $setting )
{
    $input = sanitize_key( $input );
    $control = $setting->manager->get_control( $setting->id );
    $choices = $control->choices;
    return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}
$control变量的值始终为null,因为方法get\\u control()需要“control ID”,而不是“setting ID”

我想不出一个方法来获取控件的ID,有什么想法吗?

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

我认为这可能不是客户组织方式的正确方法。

控件和设置是非常独立的实体。控件可以保存设置,但设置不绑定到特定控件。例如,就我所知,没有什么能阻止您在单个设置中使用多个控件。

我的建议是将选项抽象为一个单独的函数或变量,然后在适当的地方引用它。例如,具有定义有效选项的函数:

function wpse_316500_choices() {
    return [
        \'one\'   => \'One\',
        \'two\'   => \'Two\',
        \'three\' => \'Three\',
    ];
}
然后在注册控件时使用该功能:

$wp_customize->add_control( \'wpse_316500_setting\',
    [
        \'type\'    => \'select\',
        \'choices\' => wpse_316500_get_choices(),
    ]
);
以及消毒功能:

function wpse_316500_sanitize( $input, $setting ) {
    $input = sanitize_key( $input );
    $choices = wpse_316500_get_choices();

    return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}

结束

相关推荐