禁止用户在某些类别中发帖

时间:2013-12-24 作者:Nitesh

我正在写一个插件,它将禁止用户在某些类别中发表文章。我试图向用户显示一条错误消息,当用户试图在受限类别中发布时,我还希望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. 我不确定是否需要实现类似于此问题中提到的内容。

如有任何建议,将不胜感激。提前谢谢。

1 个回复
最合适的回答,由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.

结束

相关推荐

QUERY_POSTS结果与wp_QUERY请求结果不同

我有一个多站点Wordpress设置(3.5.1,我不能冒险更新),在切换到正确的博客后,我正在查询一些帖子。我有一个带有以下参数的query\\u posts函数:$posts = query_posts(\'posts_per_page=5&paged=1&post_status=publish&orderby=date&order=desc\'); 通过此帖子查询,query\\u vars变为($GLOBALS[\'wp_query\']->quer