我正在写一个插件,它将禁止用户在某些类别中发表文章。我试图向用户显示一条错误消息,当用户试图在受限类别中发布时,我还希望WP不要将相同的内容发布到数据库中。我正在尝试使用save\\u post挂钩来完成此操作。然而,我被困在如何告诉WordPress不要保存这篇文章上。
function buc_validatePostUpdate($post_id) {
global $wpdb, $user_ID;
$buc_values = get_user_meta($user_ID,\'buc_user_cat\');
$buc_final = explode(\',\', $buc_values[0]);
$post_cat = get_the_category($post_id);
foreach($post_cat as $cat) {
if(in_array( $cat->term_id, $buc_final ) !== FALSE) {
}
else {
//At this place, I need to tell WordPress not to update the post and return back.
add_action( \'admin_notices\', \'custom_error_notice\' );
return false;
}
}
}
add_action( \'save_post\', \'buc_validatePostUpdate\' );
function custom_error_notice(){
echo \'<div class="error"><p>Error!!!!</p></div>\';
remove_action( \'admin_notices\', \'custom_error_notice\' );
}
EDIT 1
在进一步搜索时,我在
WA. 我不确定是否需要实现类似于此问题中提到的内容。
如有任何建议,将不胜感激。提前谢谢。
最合适的回答,由SO网友:s_ha_dum 整理而成
save_post
太晚了。Look at the source 你可以看到,当钩子开火时,柱子已经被保存了。如果要阻止保存,必须在挂接之前中断该过程。
我想我会倾向于这样的事情:
add_filter(
\'post_updated_messages\',
function($messages) {
$messages[\'post\'][11] = \'This is my new message\';
return $messages;
}
);
add_action(
\'load-post.php\',
function () {
// summarily kill submission
// and redirect back to edit page
// purely to demonstrate the process
$redir = admin_url(\'post.php?action=edit&message=11\');
if (
isset($_POST[\'post_ID\']) && ctype_digit($_POST[\'post_ID\'])
) {
$redir .= \'&post=\'.(int)$_POST[\'post_ID\'];
// var_dump($redir); die;
wp_redirect($redir);
die();
}
}
);
您的
buc_validatePostUpdate
代码将在匿名函数中运行
// summarily kill submission
注释和内部
if
有条件的
注意:此代码非常粗糙。我百分之百确信它会做一些不想做的事情。仅将其用作跳板。It is not final production code.