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

Php 允许用户仅管理自己帖子上的评论,php,wordpress,filter,comments,admin,Php,Wordpress,Filter,Comments,Admin,我想限制contributer和author用户只查看和管理他们自己帖子上的评论 我尝试了以下过滤器,但没有成功 //Manage Your Own Comments Only function myplugin_comments_thisuseronly( $wp_query ) { if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit-comments.php' ) !== false ) { if ( !curren

我想限制contributer和author用户只查看和管理他们自己帖子上的评论

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

//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));
    }
}
}
添加过滤器('parse_query','myplugin_comments_thisuseronly')

我也试过了

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

好吧,我知道了

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

然后,通过过滤获取评论的查询(使用comments_子句)并添加一个连接,您可以仅显示当前登录用户发布的评论

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');
}

工作完美。对角色的更改可能不适合每种设置,但在这个站点上,它确实适合我。

好的,我已经解决了这个问题

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

然后,通过过滤获取评论的查询(使用comments_子句)并添加一个连接,您可以仅显示当前登录用户发布的评论

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');
}

工作完美。对角色的更改可能不适合每种设置,但在本网站上,它确实适合我。

前端、后端或两者都需要吗?后端。我将有大量的用户。他们真的不应该能够在仪表板中管理甚至看到其他人帖子上的评论。基本上是破解或禁用评论:)该死。前端会相对简单,后端会比较硬。我假设你发现了一些代码,只显示作者自己的帖子,并对其进行了修改以供评论?很抱歉,但即使进行了更多的修改,这也不会起作用。只列出一个用户的评论也相对简单。但是,在所有作者的帖子上列出评论,而不是在其他帖子上列出评论,是一个很难破解的难题。问题在于wp_comments表中确实包含了被评论帖子的帖子ID,但没有包含其作者。因此,我看到的唯一解决方案是从wp admin中删除针对作者和贡献者的常规评论部分,并通过插件实现您自己的评论,它不使用wordpress挂钩,而是直接从wp_comments表中获取注释。它必须从wp_posts表中获取数组中特定作者帖子的所有帖子ID,然后从wp_comments中获取与这些ID相关的所有评论,然后在wp admin中显示它们。这是可以做到的,但不幸的是,这超出了问答的范围,也超出了合同工作的范围。希望,为了你的缘故,我错了(对此我非常怀疑):我会问同样的问题,你需要在前端、后端还是两者都需要?后端。我将有大量的用户。他们真的不应该能够在仪表板中管理甚至看到其他人帖子上的评论。基本上是破解或禁用评论:)该死。前端会相对简单,后端会比较硬。我假设你发现了一些代码,只显示作者自己的帖子,并对其进行了修改以供评论?很抱歉,但即使进行了更多的修改,这也不会起作用。只列出一个用户的评论也相对简单。但是,在所有作者的帖子上列出评论,而不是在其他帖子上列出评论,是一个很难破解的难题。问题在于wp_comments表中确实包含了被评论帖子的帖子ID,但没有包含其作者。因此,我看到的唯一解决方案是从wp admin中删除针对作者和贡献者的常规评论部分,并通过插件实现您自己的评论,它不使用wordpress挂钩,而是直接从wp_comments表中获取注释。它必须从wp_posts表中获取数组中特定作者帖子的所有帖子ID,然后从wp_comments中获取与这些ID相关的所有评论,然后在wp admin中显示它们。这是可以做到的,但不幸的是,这超出了问答的范围,也超出了合同工作的范围。希望,为了你的缘故,我错了(对此我非常怀疑):我会在