WordPress Customizer SANITIZE_CALLBACK:如何在失败时重置为默认设置

时间:2017-03-25 作者:Johannes Filter

我使用检查某些设置的健全性sanitize_callback. 它可以工作,但如果失败,我想重置该值并执行默认值。我该怎么做?

$wp_customize->add_setting(
    $attribute[0],
    array(
        "default" => $attribute[1],
        "sanitize_callback" => $validate_func,
    )
);

EDIT

的示例$validate_funckb_validate_url_facebook 检查设置是否为URL,以及是否包含facebook。com。

function kb_validate_url( $url, $valid, $default ) {
    if ( $url === "" ) return $default;

    $url = strtolower( esc_url_raw( $url ) );
    if ( !strpos( $url, $valid ) ) {
        if ( $url !== "" ) {
            return null;
        }
    }
    return $url;
}

function kb_validate_url_facebook( $url ) {
    return kb_validate_url( $url, \'facebook.com\', \'www.facebook.com/USERNAME\' );
}

1 个回复
SO网友:Weston Ruter

sanitize_callback 函数可以查看第二个参数WP_Customize_Setting 实例并访问default 由于提供的值为空,返回时会出现以下属性:

add_action( \'customize_register\', function( WP_Customize_Manager $wp_customize ) {
    $wp_customize->add_setting( \'facebook_url\', array(
        \'default\' => \'https://www.facebook.com/USERNAME\',
        \'sanitize_callback\' => function( $url, $setting ) {
            if ( empty( $url ) ) {
                return $setting->default; // <===== Accessing default value.
            }

            $url = strtolower( esc_url_raw( $url ) );
            $host = wp_parse_url( $url, PHP_URL_HOST );
            if ( ! preg_match( \'/^(www\\.)?facebook\\.com$/\', $host ) ) {
                return new WP_Error( \'invalid_url\', __( \'Invalid URL or not one for Facebook\', \'kb\' ) );
            }
            return $url;
        },
    ) );
} );

相关推荐