gpt4 book ai didi

php - wordpress 自定义帖子类型中的字段验证和显示错误

转载 作者:可可西里 更新时间:2023-11-01 13:13:33 26 4
gpt4 key购买 nike

大家好,我在 wordpress 中开始了我的第一个插件,经过一些工作后我在现场验证中受到了打击..

问题是我有一个名为 "preix_author_url" 的字段,然后在我的插件中使用

add_action('save_post', 'my_function_name');

我已经创建了一个验证类示例

<?php
class validator {
public static function isUrl($str = '') {
if(strlen($str) == 0)
return FALSE;

return preg_match('!^http(s)?://[\w-]+\.[\w-]+(\S+)?$!i',$str);
}
}

“my_function_name()”

    function my_function_name(){
global $post;
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if(isset($_POST['post_type']) && $_POST['post_type'] == 'wallpapers'){
require_once( WALLP_FILE_PATH . '/wallp-core/wallp-validator.php' );
$validate = new validator();
if(isset($_POST['preix_author_url'])){
if($validate->isUrl($_POST['preix_author_url']))
update_post_meta($post->ID, 'preix_author_url', $_POST['preix_author_url']);
}
}
}

现在我想在验证返回 false 时在帖子页面中显示错误。但我没有得到显示这些错误或通知的方式..

最佳答案

所以过了一会儿我终于弄明白了。我保证会在 20 分钟内回复您,但我失败了,因为我认为这很容易!!我到处搜索后发现 admin_notices 不会在 save_post Hook 上工作!因此,这是解决您的问题的好方法。

    //for action hooks
add_action('save_post', 'my_function_name');
$validator = new Validator();
// called after the redirect
add_action('admin_head-post.php', array(&$validator, 'add_plugin_notice'));

//change your my_function_name with this
function my_function_name() {
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (isset($_POST['post_type']) && $_POST['post_type'] == 'wallpapers') {
require_once( WALLP_FILE_PATH . '/wallp-core/wallp-validator.php' );
$validate = new validator();
if (isset($_POST['preix_author_url'])) {
//if($validate->isUrl($_POST['preix_author_url']))
//update_post_meta(
//$post->ID, 'preix_author_url', $_POST['preix_author_url']);
$validator = new Validator();
if (!$validator->isUrl($_POST['preix_author_url'])) {
$validator->update_option(1);
return;
} else {
update_post_meta(
$post->ID,
'preix_author_url', $_POST['preix_author_url']);
}
}
}
}

//ive also revised your class
class Validator {
//new isUrl validation
//better use filter_var than preg_match
function isUrl($str = '') {
if (filter_var($str, FILTER_VALIDATE_URL) === FALSE) {
return FALSE;
} else {
return TRUE;
}
}

//You can change the error message here.
//This for your your admin_notices hook
function show_error() {
echo '<div class="error">
<p>Error Found!!</p>
</div>';
}

//update option when admin_notices is needed or not
function update_option($val) {
update_option('display_my_admin_message', $val);
}

//function to use for your admin notice
function add_plugin_notice() {
if (get_option('display_my_admin_message') == 1) {
// check whether to display the message
add_action('admin_notices', array(&$this, 'show_error'));
// turn off the message
update_option('display_my_admin_message', 0);
}
}
}

我在我的个人网站上试过了,效果很好!!我也从中学到了很多东西!

关于php - wordpress 自定义帖子类型中的字段验证和显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com