有没有可能过滤帖子中的评论,让用户只能看到他们写的评论?

时间:2017-04-02 作者:Keith Pocock

我对wordpress和编码相对较新,我在一个网站上工作,用户需要为某些帖子留下评论,但我创建网站的人希望用户只能看到他们为这些特定帖子写的评论,而不能看到其他用户的任何评论。

我已经四处寻找了一段时间,但没有找到一个似乎有效的解决方案。有没有一种方法可以让这项工作简单到我可以实现的程度?任何帮助都将不胜感激。

谢谢

1 个回复
最合适的回答,由SO网友:bosco 整理而成

假设您的评论作者是注册用户,最简单的方法可能是使用pre_get_comments action 钩子以修改WP_Comment_Query object\'suser_id 查询变量,以便查询仅返回来自当前用户的注释:

function wpse262203_restrict_comment_views( $comments_query ) {
  // Don\'t interfere with comment results in the dashboard
  if( is_admin() )
    return;

  $current_user = wp_get_current_user(); // Get the current user

  if( $current_user instanceof WP_User && is_user_logged_in() ) {
    // The visitor is logged in as a WordPress user...

    // If they\'re an administrator, don\'t filter the comments
    if( in_array( \'administrator\', $current_user->roles ) )
      return;

    // Otherwise, restrict queried comments to those authored by this user.
    $comments_query->query_vars[ \'user_id\' ] = $current_user->ID;
  }
  else {
    // The visitor isn\'t logged in - make sure no comments are queried.
    $comments_query->query_vars[ \'comment__in\' ] = array(0);
  }
}

add_action( \'pre_get_comments\', \'wpse262203_restrict_comment_views\' );
您还可以use current_user_can() instead of/in addition to checking for user roles 定制筛选评论的对象。

而您也可以通过使用wp_get_current_commenter()author_email WP_Comment_Query 这不是非常可靠或安全的。匿名评论者ID数据存储在Cookie中,这意味着用户可以清除它,否则Cookie可能会过期-在这种情况下,用户将无法查看他们的评论,直到他们发布另一条评论。凭证也很容易被欺骗——狡猾的访问者可能会获得其他用户的评论。

编辑-为什么这不起作用,之前经过进一步调查,我之前尝试使用WP_Comment_Query::set() 更改查询变量失败,因为事实证明,WP_Comment_Query 实际上没有set() 方法,而不是WP_Query 副本(参见ticket #39120). 但它确实有__call() "Magic Method", 正在拦截对不存在的set() 方法并返回false,从而防止了PHP通常会抛出的错误,并使我困惑不已。

相关推荐

获取WordPress Get_Comments()中最后一次看到的日期/时间

我可以得到comment_date 有一个循环它显示为2018-03-19 12:30:06.<来,我只想Last seen 格式(例如,3 min ago , 1 hour ago , 1 day ago , 2 week ago ) 我怎样才能做到这一点?[\"comment_date\"]=> string(19) \"2018-03-19 12:30:06\" [\"comment_date_gmt\"]=> string(19) \"2018-03