WordPress网站验证

时间:2017-01-30 00:34:37

标签: php wordpress validation

我试图在WordPress中验证网址,但它无效。我想做的就是这样,当有人在开头插入没有http的内容时,它会给你一个错误信息。你可以帮帮我吗?这是我的代码:

<?php

defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

//adding the meta box fields
function team_web_field() {
    add_meta_box( 'custom-team-web', __( 'Website' ), 'team_show_website', 'team', 'normal', 'low' );
}

add_action( 'admin_init', 'team_web_field' );

// HTML for the admin area
function team_show_website() {
    global $post;
    $website = get_post_meta( $post->ID, 'website', true );

        //validating!
    if ( ! preg_match( "/http(s?):\/\//", $website ) && $website != "") {
        $errors = "This URL isn't valid";
        $website = "http://";

    } 

    // output invalid url message and add the http:// to the input field
    if( isset($errors) ) { echo sanitize_text_field($errors); }

    ?>  
    <p>
        <label for="team_website">
                <input id="team_website" size="55" name="team_website" value="<?php if( isset($website) ) { echo $website; } ?>" />
        </label>
    </p>
    <?php
}

//saving custom field data
function team_website_save( $post_id ) {
    global $post;   

    if( isset($_POST['team_website'])) {
        update_post_meta( $post->ID, 'website', esc_url_raw($_POST['team_website']) );
    }
}

add_action( 'save_post', 'team_website_save' );

?>

1 个答案:

答案 0 :(得分:0)

问题是esc_url_raw导致网站为空字符串,因为协议无效,因此$website != ""条件为false。

来自WordPress documentation on esc_url_raw

  

如果$ url指定的协议不是$ protocols中的协议,或者$ url包含空字符串,则返回空字符串。

此外,无论字符串中的http://位于何处,您的正则表达式都是匹配的。您可能希望将其更改为/^http(s?):\/\//,并可能进行不区分大小写的检查。