我试图在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' );
?>
答案 0 :(得分:0)
问题是esc_url_raw
导致网站为空字符串,因为协议无效,因此$website != ""
条件为false。
来自WordPress documentation on esc_url_raw:
如果$ url指定的协议不是$ protocols中的协议,或者$ url包含空字符串,则返回空字符串。
此外,无论字符串中的http://
位于何处,您的正则表达式都是匹配的。您可能希望将其更改为/^http(s?):\/\//
,并可能进行不区分大小写的检查。