无法清理自定义API中的选择控件

时间:2017-02-20 作者:Prafulla Kumar Sahu

我正在使用wordpress 4.7.2。

我正在为我的自定义主题创建一个自定义部分。这是我的选择控件。

 $wp_customize->add_setting( $this->slug . \'_blog[pagination_type]\', array(
            \'default\'           => \'classic-pagination\',
            \'transport\'         => \'postMessage\',
            \'type\'              => \'theme_mod\',
            \'sanitize_callback\' => \'my_theme_sanitize_select\',
        ) );

        $wp_customize->add_control( $this->slug . \'_blog[pagination_type]\', array(
            \'label\'    => \'Pagination Type\',
            \'section\'  => $this->slug . \'_blog_section\',
            \'type\'     => \'select\',
            \'choices\'  => array(
                \'classic-pagination\' => \'Classic Pagination\',
                \'load-more-button\'   => \'Load More Button\'
                ),
            \'priority\' => 18,
        ) );
我的sanitize\\u回调函数是

public function my_theme_sanitize_select( $input, $setting ) {
    // Ensure input is a slug
    $input = sanitize_key( $input );
    // Get list of choices from the control
    // associated with the setting
    $choices = $setting->manager->get_control( $setting->id )->choices;
    // If the input is a valid key, return it;
    // otherwise, return the default
    return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}
尝试保存数据时显示错误无效值。

我甚至尝试了使用just sanitize\\u键功能,但无法正确执行

public function my_theme_sanitize_select( $input ) {
        return sanitize_key( $input );
    }
然后甚至

public function my_theme_sanitize_select( $input ) {
        return $input;
    }
以及

public function my_theme_sanitize_select( $input ) {
        return true;
    }
但当我没有调用任何消毒功能时,它工作正常。这意味着我在创建sanitize\\u回调()时犯了一些错误,但在reference 回调函数也具有相同的命名和函数定义。

之后,我搜索了类似的问题,得到了one 但是解决不了这个问题,请帮帮我。

我查了核心代码,发现WP_Customize_Settingsanitize() 我的输入数据变得null . 但无法得到更多的想法。

1 个回复
SO网友:David Lee

这个add_setting 逻辑找不到my_theme_sanitize_select 函数,您需要告诉它在哪里:

\'sanitize_callback\'    => array( $this, \'my_theme_sanitize_select\' ),
请记住,您的函数位于类中,因此不能仅访问它,请将其添加到类中:

public function my_theme_sanitize_select( $input, $setting ) {
    $from_parent = my_theme_sanitize_select( $input, $setting );
    return $from_parent;
}

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register