我对wordpress和编码还比较陌生,我正在一个网站上工作,在该网站上用户需要对某些帖子发表评论,但是我正在为其创建网站的人希望用户只能看到他们的评论。已为这些特定帖子撰写文章,没有其他用户的任何评论。
我已经搜索了一阵子了,但是找不到能够起作用的解决方案。有没有一种方法可以让我轻松实现呢?任何帮助将不胜感激。
谢谢!
我对wordpress和编码还比较陌生,我正在一个网站上工作,在该网站上用户需要对某些帖子发表评论,但是我正在为其创建网站的人希望用户只能看到他们的评论。已为这些特定帖子撰写文章,没有其他用户的任何评论。
我已经搜索了一阵子了,但是找不到能够起作用的解决方案。有没有一种方法可以让我轻松实现呢?任何帮助将不胜感激。
谢谢!
Answers:
假设您的注释作者打算是注册用户,最简单的方法可能是使用pre_get_comments
操作挂钩来修改WP_Comment_Query
对象的user_id
查询var,以使查询仅返回当前用户的注释:
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' );
除了检查用户角色以外,还可以使用current_user_can()
/代替/除检查用户角色之外,还可以定制要筛选谁的注释。
尽管您还可以通过wp_get_current_commenter()
结合使用author_email
WP_Comment_Query
参数来支持匿名评论,但这并不是绝对可靠或安全的。匿名评论者ID数据存储在cookie中,这意味着用户可以清除它或cookie可能过期-在这种情况下,用户将无法查看他们的评论,除非他们发表其他评论。凭据也很容易被欺骗-狡猾的访问者可能会访问其他用户的评论。
经过进一步调查,我先前尝试使用WP_Comment_Query::set()
更改查询变量的尝试失败了,因为事实证明,WP_Comment_Query
它实际上没有一种set()
方法,与之相反WP_Query
(请参见故障单#39120)。但是,它确实有一个__call()
“魔术方法”,该方法拦截了对不存在的set()
方法的调用并返回false,从而防止了PHP通常会抛出的错误并使我感到困惑。
functions.php
现在使用(尽管老实说,我还没有实际测试过Oo)。让我知道事情的后续!