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

Kat*_*ine 0 php wordpress comments admin filter

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

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

//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));
    }
}
}
Run Code Online (Sandbox Code Playgroud)

add_filter('parse_query', 'myplugin_comments_thisuseronly');

我也尝试过

$wp_query->set('comment_post_ID__in', array($usersposts));
Run Code Online (Sandbox Code Playgroud)

Kat*_*ine 5

好吧,我明白了。

首先,用户需要拥有有权编辑已发布帖子和审核评论的角色。后者对于作者/贡献者来说不是标准的。

然后,通过过滤获取评论的查询(使用 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');
}
Run Code Online (Sandbox Code Playgroud)

工作完美。角色的更改可能并不适合所有设置,但碰巧它确实适合我在这个网站上。