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)
好吧,我明白了。
首先,用户需要拥有有权编辑已发布帖子和审核评论的角色。后者对于作者/贡献者来说不是标准的。
然后,通过过滤获取评论的查询(使用 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)
工作完美。角色的更改可能并不适合所有设置,但碰巧它确实适合我在这个网站上。