【问题标题】:Only show Wordpress comments when the user has posted their own comment仅当用户发表了自己的评论时才显示 Wordpress 评论
【发布时间】:2020-12-11 00:58:33
【问题描述】:

我正在运行 WordPress 网站,我需要调整评论选项。在该用户发表自己的评论之前,我希望为用户隐藏任何帖子的 cmets。如果用户已注销,则除了登录链接之外的所有内容都将被隐藏。如果用户已登录 - 评论表单可见但 cmets 不可见。

到目前为止我得到了什么:

<?php

       if ( post_password_required() ) {
    return;
}
?>

<div id="comments" class="comments-area">

    <?php
    if ( have_comments() ) :
        ?>
        
        <?php

        the_comments_pagination(
            array(
                'prev_text'          => '<span class="screen-reader-text">' . __( 'Previous page', 'spoort' ) . '</span><i class="long-arrow-left" ></i>',
                'next_text'          => '<span class="screen-reader-text">' . __( 'Next page', 'spoort' ) . '</span><i class="long-arrow-right"></i>',
                'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'spoort' ) . ' </span>',
            )
        );
    endif;

    if ( ! comments_open() && get_comments_number() ) :
        echo '<p class="no-comments">' . esc_html_e( 'Comments are closed.', 'spoort' ) . '</p>';
    endif;
    comment_form();
        ?>
    
    <?php if ( is_user_logged_in() ) { ?>
            <ol class="comment-list">
        <?php
        wp_list_comments(
            array(
                'style'       => 'ol',
                'avatar_size' => 48,
                'short_ping'  => true,
            )
        );
        ?>
        </ol>
</div>
        <?php } else { ?>
<?php } ?>

【问题讨论】:

    标签: php wordpress function comments


    【解决方案1】:

    您提供的代码似乎试图以错误的顺序和/或在错误的位置执行操作。例如,if ( have_comments() ) : 将显示寻呼机,但您在是否应显示 cmets 的逻辑之外有这个逻辑,因此很可能有人看到寻呼机但没有 cmets,这是不好的。

    您提供的代码有点不清楚,但我相信您想要以下内容:

    <?php
    
    if ( post_password_required() ) {
        return;
    }
    ?>
    
    <?php
    $display_comments = false;
    
    if(comments_open()) {
        if(is_user_logged_in()) {
            ?>
            <div id="comments" class="comments-area">
    
            <?php
            //Go through all the comments on the post.
            foreach(get_comments() as $current_comment) {
                if($current_comment->comment_author == get_current_user_id()) {
                    $display_comments = true;
                }
            }
    
    
            if(have_comments() && $display_comments) {
                the_comments_pagination(
                    array(
                        'prev_text'          => '<span class="screen-reader-text">' . __( 'Previous page', 'spoort' ) . '</span><i class="long-arrow-left" ></i>',
                        'next_text'          => '<span class="screen-reader-text">' . __( 'Next page', 'spoort' ) . '</span><i class="long-arrow-right"></i>',
                        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'spoort' ) . ' </span>',
                    )
                );
                comment_form();
    
                <ol class="comment-list">
                <?php
                wp_list_comments(
                    array(
                        'style'       => 'ol',
                        'avatar_size' => 48,
                        'short_ping'  => true,
                    )
                );
                ?>
                </ol>
                <?php
            } else {
                comment_form();
            }
    
            ?>
            </div>
            <?php
        }
    
    
    }
    
    
    
    
    
    
    
    
    if(!comments_open() || !get_comments_number()) {
        echo '<p class="no-comments">' . esc_html_e( 'Comments are closed.', 'spoort' ) . '</p>';
    }
    

    【讨论】:

    • 感谢您的回答。但是,我尝试了您的代码,我必须将 $display_cmets 更改为 true,否则即使我已登录也看不到 cmets。它工作得很好,但它并没有达到我真正想要的效果。我只想为已登录并发表评论的用户显示 cmets。我尝试从另一个文件添加函数,但它不想按我想要的方式工作。我有一个可以提供帮助的代码,但不确定如何将其添加到当前文件中。 &lt;?php if ( '0' == $comment-&gt;comment_approved ) : ?&gt;
    • 我建议在 foreach 循环中转储值(echo '&lt;pre&gt;'; print_r($current_comment); echo '&lt;/pre&gt;';echo get_current_user_id();)。我可能错过了那里的不匹配...也许$current_comment-&gt;comment_author是用户名而不是用户的ID,在这种情况下,您需要从get_current_user_id()派生用户名,然后再将其与$current_comment-&gt;comment_author进行比较跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多