Вопрос или проблема
Пожалуйста, помогите мне изменить код, чтобы форма комментариев находилась выше списка комментариев в WordPress. Ниже приведен код страницы comments.php
<?php
/**
* Шаблон для отображения комментариев.
*/
?>
<?php
/*
* Если текущий пост защищен паролем и
* посетитель еще не ввел пароль, мы,
* возвращаемся без загрузки комментариев.
*/
if (post_password_required()) return;
?>
<?php if ( comments_open() ) : ?>
<div id="comments" class="comments-area clear-fix">
<?php if (have_comments()):?>
<div class="comments-area-title">
<h3>
<?php printf( _n('1 комментарий', '%1$s комментариев', get_comments_number(), 'gloria'), number_format_i18n(get_comments_number()));?>
</h3>
</div><!-- Конец Заголовка Области Комментариев -->
<?php endif;?>
<?php // Вы можете начать редактировать здесь -- включая этот комментарий! ?>
<?php if ( have_comments() ) : ?>
<ol class="commentlist">
<?php
/* Перебираем и выводим комментарии. Сообщите wp_list_comments()
* использовать wpgrade_comment() для форматирования комментариев.
* Если вы хотите переопределить это в дочерней теме, вы можете
* определить wpgrade_comment() и она будет использоваться вместо.
* См. wpgrade_comment() в inc/template-tags.php для получения дополнительной информации.
*/
wp_list_comments( array( 'callback' => 'gloria_comments','short_ping' => true ) );
?>
</ol><!-- .commentlist -->
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // есть ли комментарии для навигации ?>
<nav role="navigation" id="comment-nav-bottom" class="comment-navigation clearfix">
<div class="nav-previous"><?php previous_comments_link( esc_html__( '← Более старые комментарии', 'gloria' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( esc_html__( 'Более новые комментарии →', 'gloria' ) ); ?></div>
</nav>
<?php endif; // проверяем навигацию комментариев ?>
<?php endif; // have_comments() ?>
<?php
// Если комментарии закрыты и есть комментарии, давайте оставим небольшую записку, согласны?
if ( ! comments_open() && post_type_supports( get_post_type(), 'comments' ) && !is_page() ) :
?>
<p class="nocomments"><?php esc_html_e( 'Комментарии закрыты.', 'gloria' ); ?></p>
<?php endif; ?>
</div><!-- #comments .comments-area -->
<?php
$commenter = wp_get_current_commenter();
$req = get_option( 'require_name_email' );
$aria_req = ( $req ? " aria-required='true'" : '' );
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
$comments_args = array(
// измените заголовок кнопки отправки
'title_reply'=> esc_html__('Оставить ответ', 'gloria'),
// уберите "Текст или HTML, которые будут отображены после набора полей комментариев"
'comment_notes_before' => '',
'comment_notes_after' => '',
'logged_in_as' => '<p class="logged-in-as">' . sprintf( esc_html__( 'Вы вошли как', 'gloria') .' <a href="https://wordpress.stackexchange.com/questions/283599/%1$s">%2$s</a>. <a href="%3$s" title="'.esc_html__('Выйти из этого аккаунта','gloria').'">'.esc_html__('Выйти?','gloria').'</a>', admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( ) ) ) ) . '</p>',
'fields' => apply_filters( 'comment_form_default_fields', array(
'author' => '<p class="comment-form-author"><input id="author" name="author" type="text" placeholder="'.esc_html__('Имя*', 'gloria').'..." size="30" ' . $aria_req . ' /></p>',
'email' => '<p class="comment-form-email"><input id="email" name="email" size="30" type="text" placeholder="'.esc_html__('Email*', 'gloria').'..." '. $aria_req .' /></p>' ) ),
'id_submit' => 'comment-submit',
'label_submit' => esc_html__('Отправить', 'gloria'),
// переопределите свою собственную текстовую область (тело комментария)
'comment_field' => '<p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true" placeholder="' . esc_html__( 'Сообщение', 'gloria' ) . '"></textarea></p>');
} else {
$comments_args = array(
// измените заголовок кнопки отправки
'title_reply'=> esc_html__('Оставить ответ', 'gloria'),
// уберите "Текст или HTML, которые будут отображены после набора полей комментариев"
'comment_notes_before' => '',
'comment_notes_after' => '',
'fields' => apply_filters( 'comment_form_default_fields', array(
'author' => '<p class="comment-form-author"><input id="author" name="author" type="text" placeholder="'.esc_html__('Имя*', 'gloria').'..." size="30" ' . $aria_req . ' /></p><!--',
'email' => '--><p class="comment-form-email"><input id="email" name="email" size="30" type="text" placeholder="'.esc_html__('Email*', 'gloria').'..." '. $aria_req .' /></p><!--',
'url' => '--><p class="comment-form-url"><input id="url" name="url" size="30" placeholder="'.esc_html__('Вебсайт', 'gloria').'..." type="text"></p>') ),
'id_submit' => 'comment-submit',
'label_submit' => esc_html__('Отправить', 'gloria'),
// переопределите свою собственную текстовую область (тело комментария)
'comment_field' => '<p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true" placeholder="' . esc_html__( 'Сообщение', 'gloria' ) . '"></textarea></p>');
}
//если у нас нет комментариев, то нам не нужен второй заголовок, одного достаточно
if ( !have_comments() ){
$comments_args['title_reply'] = esc_html__('Оставить ответ', 'gloria');
}
comment_form($comments_args); ?>
<?php endif; ?>
Условие if (have_comments()) { ... }
проверяет, есть ли какие-либо комментарии к вашему посту, и запускает цикл для их отображения.
Функция comment_form()
отвечает за отрисовку формы комментариев. Таким образом, если вы хотите поменять их местами, вам следует поменять местами эти два.
Но вам нужно убедиться, что вы переместите как comment_form()
, так и его аргументы ($comments_args
) выше цикла комментариев, так как эта переменная должна быть определена первой, иначе будут использоваться поля по умолчанию.
Легкий способ сделать это – выделить весь <div id="comments" class="comments-area clear-fix">...</div>
, вырезать его и вставить ниже comment_form()
. Обратите внимание на открывающие и закрывающие теги PHP <?php
& ?>
.
Измените файл шаблона комментариев (comments.php), чтобы функция comment_form() вызывалась до списка комментариев, что переместит форму комментариев выше списка комментариев.
<?php if ( comments_open() ) : ?>
<div id="comments" class="comments-area clear-fix">
<?php // Переместите форму комментариев выше списка комментариев ?>
<?php comment_form(); ?>
<?php if (have_comments()):?>
<div class="comments-area-title">
<h3>
<?php printf( _n('1 комментарий', '%1$s комментариев', get_comments_number(), 'gloria'), number_format_i18n(get_comments_number()));?>
</h3>
</div><!-- Конец Заголовка Области Комментариев -->
<?php endif;?>
<?php // Вы можете начать редактировать здесь -- включая этот комментарий! ?>
<?php if ( have_comments() ) : ?>
<ol class="commentlist">
<?php
/* Перебираем и выводим комментарии. Сообщите wp_list_comments()
* использовать wpgrade_comment() для форматирования комментариев.
* Если вы хотите переопределить это в дочерней теме, вы можете
* определить wpgrade_comment() и она будет использоваться вместо.
* См. wpgrade_comment() в inc/template-tags.php для получения дополнительной информации.
*/
wp_list_comments( array( 'callback' => 'gloria_comments','short_ping' => true ) );
?>
</ol><!-- .commentlist -->
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // есть ли комментарии для навигации ?>
<nav role="navigation" id="comment-nav-bottom" class="comment-navigation clearfix">
<div class="nav-previous"><?php previous_comments_link( esc_html__( '← Более старые комментарии', 'gloria' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( esc_html__( 'Более новые комментарии →', 'gloria' ) ); ?></div>
</nav>
<?php endif; // проверяем навигацию комментариев ?>
<?php endif; // have_comments() ?>
<?php
// Если комментарии закрыты и есть комментарии, давайте оставим небольшую записку, согласны?
if ( ! comments_open() && post_type_supports( get_post_type(), 'comments' ) && !is_page() ) :
?>
<p class="nocomments"><?php esc_html_e( 'Комментарии закрыты.', 'gloria' ); ?></p>
<?php endif; ?>
</div><!-- #comments .comments-area -->
<?php endif; // comments_open() ?>
Ответ или решение
Как переместить форму комментариев выше списка комментариев в WordPress
Для изменения расположения формы комментариев в WordPress так, чтобы она отображалась над списком комментариев, необходимо внести коррективы в файл шаблона comments.php
вашей темы. Важно следовать правильно структуре этого файла, чтобы избежать ошибок при рендеринге комментариев. В данной инструкции мы рассмотрим пошаговый процесс реализации этого изменения.
Шаг 1: Откройте файл comments.php
Первый шаг — это открыть файл comments.php
, который находится в папке вашей активной темы (обычно wp-content/themes/ваша_тема/
). Для этого вы можете использовать любой текстовый редактор или встроенный редактор тем в админ-панели WordPress.
Шаг 2: Понять структуру файла
Файл comments.php
содержит код, который отвечает за отображение формы комментариев и списка комментариев. В текущей конфигурации форма комментариев отображается под списком комментариев. Однако, для нашего случая мы должны переместить её над списком.
Шаг 3: Сделайте резервную копию
Перед внесением изменений обязательно создайте резервную копию файла comments.php
, чтобы вы могли восстановить оригинал в случае ошибки.
Шаг 4: Внесите изменения в код
Ниже представлен изменённый код, который демонстрирует, как переместить форму комментариев (функцию comment_form()
) выше списка комментариев.
<?php
/**
* The template for displaying Comments.
*/
?>
<?php
if (post_password_required()) return;
?>
<?php if (comments_open()) : ?>
<div id="comments" class="comments-area clear-fix">
<?php
// Вызов формы комментариев выше списка комментариев
comment_form();
?>
<?php if (have_comments()): ?>
<div class="comments-area-title">
<h3>
<?php printf(_n('1 comment', '%1$s comments', get_comments_number(), 'gloria'), number_format_i18n(get_comments_number())); ?>
</h3>
</div><!-- End Comment Area Title -->
<?php endif; ?>
<?php if (have_comments()) : ?>
<ol class="commentlist">
<?php
wp_list_comments(array('callback' => 'gloria_comments', 'short_ping' => true));
?>
</ol><!-- .commentlist -->
<?php if (get_comment_pages_count() > 1 && get_option('page_comments')) : ?>
<nav role="navigation" id="comment-nav-bottom" class="comment-navigation clearfix">
<div class="nav-previous"><?php previous_comments_link(esc_html__('← Older Comments', 'gloria')); ?></div>
<div class="nav-next"><?php next_comments_link(esc_html__('Newer Comments →', 'gloria')); ?></div>
</nav>
<?php endif; // check for comment navigation ?>
<?php endif; // have_comments() ?>
<?php if (!comments_open() && post_type_supports(get_post_type(), 'comments') && !is_page()) : ?>
<p class="nocomments"><?php esc_html_e('Comments are closed.', 'gloria'); ?></p>
<?php endif; ?>
</div><!-- #comments .comments-area -->
<?php endif; // comments_open() ?>
Шаг 5: Сохраните изменения
После внесения изменений сохраните файл. Затем обновите страницу комментариев на вашем сайте, чтобы убедиться, что форма комментариев теперь отображается выше списка комментариев.
Заключение
Перемещение формы комментариев выше списка может улучшить пользовательский интерфейс вашего сайта, делая его более удобным для посетителей. Следуя этой инструкции, вы сможете легко настроить отображение комментариев согласно вашим требованиям. Помните, что всегда лучше тестировать изменения на локальном сервере или бэкенде, прежде чем развернуть их на живом сайте.