允许用户仅管理自己帖子的评论

时间:2011-10-21 10:57:57

标签: php wordpress filter comments admin

我想限制撰稿人和作者用户仅在他们自己的帖子上查看和管理评论。

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

//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));

1 个答案:

答案 0 :(得分: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');
}

完美无缺。对角色的更改可能不适合每个设置,但实际上它在我的网站上对我有用。