#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