我有一个在帖子类型上定义自定义字段的函数。假设该字段为“副标题”。
保存帖子后,我想对输入内容进行一些验证,并在必要时在帖子编辑屏幕上显示错误消息。就像是:
// Handle post updating
function wpse_update_post_custom_values($post_id, $post) {
// Do some checking...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors->add('oops', 'There was an error.');
}
return $errors;
}
add_action('save_post','wpse_update_post_custom_values',1,2);
我试图将其挂钩到save_post动作,但是我不知道如何处理错误。似乎没有错误对象传递到函数中,并且如果我创建自己的WP_Error obj并将其返回,则无论哪种机制都不会在后期编辑页面上吐出错误,因此不会尊重它。
我目前在我的自定义meta框内有一个页面错误消息,但这并不理想-我宁愿有一个大的,红色的,最顶部的错误,如WP通常显示。
有任何想法吗?
更新:
根据@Denis的回答,我尝试了一些不同的方法。将错误存储为全局变量是行不通的,因为Wordpress在save_post过程中进行了重定向,这会在显示全局变量之前将其杀死。
我最终将它们存储在meta字段中。问题是您需要清除它们,否则当您导航到另一个页面时它们不会消失,因此我不得不在admin_footer上附加另一个函数,以清除错误。
我不会期望这么常见的错误处理(更新帖子)会很笨拙。我是否缺少明显的东西,或者这是最好的方法?
// Handle post updating
function wpse_5102_update_post_custom_values($post_id, $post) {
// To keep the errors in
$errors = false;
// Do some validation...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors .= 'whoops...there was an error.';
}
update_option('my_admin_errors', $errors);
return;
}
add_action('save_post','wpse_5102_update_post_custom_values',1,2);
// Display any errors
function wpse_5102_admin_notice_handler() {
$errors = get_option('my_admin_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'wpse_5102_admin_notice_handler' );
// Clear any errors
function wpse_5102__clear_errors() {
update_option('my_admin_errors', false);
}
add_action( 'admin_footer', 'wpse_5102_clear_errors' );
update_option('my_admin_errors', false);
在if末尾的if语句之后立即运行会更有效wpse_5102_admin_notice_handler()
吗?
admin_footer
如果在通知处理程序函数末尾清除错误,就可以摆脱困境。简化了一点。