2011-10-21 58 views
0

我想限制贡献者和作者用户只能在他们自己的帖子上查看和管理评论。允许用户只管理他们自己帖子上的评论

我试过以下过滤器没有成功。

//Manage Your Own Comments Only 
    function myplugin_comments_thisuseronly($wp_query) { 
if (strpos($_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit-comments.php') !== false) { 
    if (!current_user_can('edit_others_posts')) { 
     global $current_user;global $wpdb; 
     $usersposts = $wpdb->get_results($wpdb->prepare("SELECT ID FROM wp_posts WHERE post_author = %s", $current_user->id)); 
     $wp_query->set('comment_post_ID', array($usersposts)); 
    } 
} 
} 

add_filter('parse_query','myplugin_comments_thisuseronly');

我也试过

$wp_query->set('comment_post_ID__in', array($usersposts)); 
+0

你是否需要在前端,后端或两者兼而有之? –

+0

后端。我将有大量的用户。他们真的不应该能够管理甚至在仪表板中看到其他人帖子的评论。这是破解这个或基本上禁用评论:) – Katherine

+0

织补。前端本来就比较简单,后端很难。 我假设你发现一些代码只显示作者自己的帖子,并修改它的意见?很抱歉地说,但是,即使有更多的修改 - 也不行。 只列出一个用户发表的评论也相对简单。但是,在所有作者的帖子上列出评论,而不是其他人的评论,这是一个棘手的问题。 问题在于,_wp_comments_表确实包括评论过帐的帖子ID,但不包括其作者。 –

回答

3

好吧,我想通了这一点。

首先,用户需要具有编辑已发布帖子和缓和评论的权限。后者是而不是作者/贡献者的标准。

然后,通过过滤获取评论(使用comments_clauses)并添加连接的查询,您可以仅显示当前登录的用户对帖子的评论。

function my_plugin_get_comment_list_by_user($clauses) { 
if (is_admin()) { 
    global $user_ID, $wpdb; 
    $clauses['join'] = ", wp_posts"; 
    $clauses['where'] .= " AND wp_posts.post_author = ".$user_ID." AND wp_comments.comment_post_ID = wp_posts.ID"; 
}; 
return $clauses; 
}; 
// Ensure that editors and admins can moderate all comments 
if(!current_user_can('edit_others_posts')) { 
add_filter('comments_clauses', 'my_plugin_get_comment_list_by_user'); 
} 

完美地工作。对角色的更改可能不适合每个设置,但正如它发生的那样,它在本网站上适用于我。

相关问题