个性化阅读
专注于IT技术分析

如何在wordpress帖子中仅显示评论作者(未注册)的未批准评论?

我得到评论

$comments = get_comments(array(
    'post_id'=>get_the_ID(), 'order'=>'ASC', ));

我在循环中检查$ comment-> comment_approved来显示注释。但我想向发送评论的人显示未经批准的评论。

我的解决方案是在所有评论(已批准或未批准)的循环中检查$ _SERVER [‘HTTP_USER_AGENT’] == $ comment-> comment_agent, 但我不确定是否足够?还是必须检查其他值?


#1


这是我发现的最佳解决方案:

// geting comments of post
$comments = get_comments(array(
    'post_id'=>get_the_ID(), 'order'=>'ASC', ));  

foreach($comments as $comment){ 
    // if unapproved comment is not commented by this user continue...
    if(!$comment->comment_approved && $_SERVER['HTTP_USER_AGENT'] != $comment->comment_agent){
        continue;
    } 
    // if unapproved comment is commented by this user show the message.
    if(!$comment->comment_approved && $_SERVER['HTTP_USER_AGENT'] == $comment->comment_agent){ 
        echo "Your comment is awaiting moderation";
    } 
    // show the comment 
    echo $comment->comment_content . '<br>';    
}

#2


$comments = get_comments(array(
    'post_id'=>get_the_ID(), 'order'=>'ASC', 'status' => 'approve', 'include_unapproved' => array(is_user_logged_in() ? get_current_user_id() : wp_get_unapproved_comment_author_email())
));

我认为使用$ _SERVER [‘HTTP_USER_AGENT’]标头是错误的。此标头仅标识请求者的浏览器:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

这样, 该检查将具有将未批准评论显示给使用与评论作者相同浏览器的任何用户的效果。

相反, get_comments()支持’include_unapproved’查询参数, 以包含与请求关联的用户的未经批准的注释。

https://codex.wordpress.org/Function_Reference/get_comments

在上面的示例中, wp_get_unapproved_comment_author_email()将查找请求参数(例如” moderation-hash”和用户cookie)以尝试确定请求是否由发布评论的同一用户发出。请注意, 用户可能会拒绝Cookie或切换设备, 并且仅在发布评论后立即为一个请求设置受监视的请求参数, 因此此功能可能并不总是有效。

还应注意, wp_get_unapproved_comment_author_email()返回的”身份”没有经过任何身份验证或保护。用户可以轻松地使用”保存我的姓名, 电子邮件和网站” Cookie断言他们代表的是自己不拥有的电子邮件地址, 然后会显示未经批准的评论, 这些评论也断言了该电子邮件地址。因此, 我建议网站要求用户注册并登录后才能发表评论。

就是说, 基于wp_get_unapproved_comment_author_email()的检查将用于向用户隐藏未经授权的注释, 而不是故意试图破坏系统, 这是主要的wordpress注释循环中使用的技术:https://developer.wordpress.org/参考/功能/ comments_template /


#3


尝试这个:

在需要注释的地方添加以下代码

$comments = get_comments(array(
    'post_id'=> get_the_ID(), 'order'=>'ASC', ));

if ( is_user_has_unapproved ( $comments, get_current_user_id() ) ) {
    echo "Your comment is awaiting moderation";
} else {
    foreach ( $comments as $comment ) {
        echo $comment->comment_content."<br>";
    }
}

将此添加到你的functions.php中

function is_user_has_unapproved ( $comments, $user_id ) {
    $i = 0;
    foreach ( $comments as $comment ) {
        if ( $comment->user_id == $user_id ) {
            if ( $comment->comment_approved == "0" ) {
                $i++;
            }
        }
    }

    if ( $i != 0 ) {
        return true;
    } else {
        return false;
    }
}

祝好运

赞(0)
未经允许不得转载:srcmini » 如何在wordpress帖子中仅显示评论作者(未注册)的未批准评论?

评论 抢沙发

评论前必须登录!