Показывать комментарии WordPress только тогда, когда пользователь опубликовал свой собственный комментарий

#php #wordpress #function #comments

#php #wordpress #функция #Комментарии

Вопрос:

Я запускаю сайт WordPress, и мне нужно настроить опцию комментирования. Я хочу, чтобы любые комментарии к сообщению были скрыты для пользователя, пока этот пользователь не разместит свой собственный комментарий. Если пользователь вышел из системы, все скрыто, кроме ссылки для входа. Если пользователь вошел в систему — видна форма комментариев, но не комментарии.

Что я получил на данный момент:

 <?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() amp;amp; 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 } ?>
  

Ответ №1:

Предоставленный вами код выглядит так, как будто он пытается что-то делать в неправильном порядке и / или в неправильных местах. Например, if ( have_comments() ) : отобразит пейджер, но у вас это выходит за рамки логики, определяющей, должны ли отображаться комментарии или нет, поэтому очень возможно, что кто-то увидит пейджер, но без комментариев, что нехорошо.

Приведенный вами код немного неясен, но я полагаю, вы хотите следующее:

 <?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() amp;amp; $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>';
}
  

Комментарии:

1. Спасибо за ответ. Тем не менее, я попробовал ваш код, мне пришлось изменить $ display_comments на true, иначе я не мог видеть комментарии, даже если я вошел в систему. Это отлично работает, но не делает того, чего я действительно хочу. Я хочу показывать комментарии только для пользователей, которые вошли в систему и опубликовали комментарий. Я попытался добавить функции из другого файла, но он не хочет работать так, как я хочу. У меня есть коды, которые могли бы помочь, но я не уверен, как добавить их в текущий файл. <?php if ( '0' == $comment->comment_approved ) : ?>

2. Я бы рекомендовал сбрасывать значения в цикле foreach ( echo '<pre>'; print_r($current_comment); echo '</pre>'; а также echo get_current_user_id(); ). Вполне возможно, что там какая-то ошибка, которую я пропустил… Возможно, $current_comment->comment_author это имя пользователя, а не идентификатор пользователя, и в этом случае вам нужно вывести username из get_current_user_id() , прежде чем сравнивать это с $current_comment->comment_author