设置API未触发Sanatize回调

时间:2013-07-09 作者:ewanm89

我正在为自定义主题创建一个自定义设置页面,但是没有调用用于对字段中的数据进行sanatizing的回调(我在其中设置了xdebug断点以进行检查)。

/**
*------------------------- Admin Page Titles -------------------------
*/

function header_options_text() {
    echo \'<p>These options affect the Header content.</p>\';
}

/**
*------------------------- Header Options -------------------------
*/

function phone_number_input() {
    $option = get_option(\'header_phone\');
    echo \'<input id="header_phone" name="header_phone" size="40" type="text" value="\'.$option.\'"> </input>\';
}
function header_logo_input() {
    $option = get_option(\'header_logo\');
    echo \'<input id="header_logo" name="header_logo" size="40" type="text" value="\'.$option.\'"> </input>\';
}

/**
*------------------------- Header Validation Options -------------------------
*/

function header_phone_validate($input) {
    $new_input=trim($input);
    if(get_option( \'header_phone\' ) === $new_input || !preg_match(\'/^[\\+\\d\\(\\)\\- ]*$/\', $new_input))
        $new_input=get_option( \'header_phone\' );
    return $new_input;
}
function header_logo_validate($input) {
    $new_input=esc_url_raw(trim($input));
    if(get_option( \'header_logo\' ) === $new_input && !filter_var($new_input, FILTER_VALIDATE_URL))
        $new_input=get_option( \'header_logo\' );
    return $input;
}

/**
 *------------------------- Actually create the pages and add to menu -------------------------
 */

add_action( \'admin_menu\', \'ec1_admin\', 10, 0 );
function ec1_admin() {
    add_menu_page( \'EC1 Theme Options\', \'EC1 Theme Options\', \'manage_options\', \'ec1-theme-options\', \'ec1_theme_options_page\' );
}

function ec1_theme_options_page() {
    ?>
    <div>
        <h2>EC1 Theme Options</h2>
        <form action="options.php" method="post">
            <?php settings_fields(\'header-options\'); ?>
            <?php settings_fields(\'header-logo-options\'); ?>
            <?php do_settings_sections( \'ec1-theme-options\' ); ?>
            <input name="Submit" type="submit" value="<?php esc_attr_e(\'Save Changes\'); ?>" />
        </form>
    </div>
    <?php
}


add_action(\'admin_init\', \'plugin_admin_init\');
function plugin_admin_init(){
    register_setting( \'header-options\', \'header_phone\', \'header_phone_validate\' );
    register_setting( \'header-logo-options\', \'header_logo\', \'header_logo_validate\' );
    add_settings_section(\'header-options-pane\', \'Header Options\', \'header_options_text\', \'ec1-theme-options\');
    add_settings_field(\'header_phone\', \'Phone Number\', \'phone_number_input\', \'ec1-theme-options\', \'header-options-pane\');
    add_settings_field(\'header_logo\', \'Header Logo\', \'header_logo_input\', \'ec1-theme-options\', \'header-options-pane\');
}
?>

1 个回复
SO网友:JMau

这是因为您的代码中有拼写错误:

在调用的函数中header_logo_validate() 它应该是:

return $new_input;
编辑:

add_action( \'admin_menu\', \'ec1_admin\', 10, 0 ); 
args没有用,只需编写add_action( \'admin_menu\', \'ec1_admin\');

编辑2:

这不是添加多个字段的正确方法。您应该将其放入数组或一个回调中。

也许您需要全球化$设置(写入global $settings;) 制作esc_url() 在此背景下开展工作,see this answer

结束

相关推荐

Comment form validation

如何设置注释字段的验证规则?我更改了评论者姓名/电子邮件/主页onmouseover和onblur的值(我使用它而不是标签-因此如果字段为空,它会显示“您的电子邮件”、“您的主页”等)。问题是,在提交时,它会在主页字段中提交此文本(因为它没有验证,而不像电子邮件字段,如果您输入了除[email protected]).如何验证主页字段?