Функция comments_template()
предназначена для загрузки шаблона комментариев на странице записи. Она обеспечивает вывод всех комментариев к посту, а также отображение формы для добавления новых комментариев.
comments_template( $file = '/comments.php', $separate_comments = false );
Параметры
- $file (строка, необязательный): Путь к файлу шаблона комментариев относительно корня темы. По умолчанию
/comments.php
. - $separate_comments (булево, необязательный): Определяет, следует ли разделять комментарии по типам (обычные комментарии, трекбеки и пинги). По умолчанию
false
.
Описание
Функция comments_template()
подключает файл шаблона комментариев из папки темы, который по умолчанию называется comments.php
. Если данного файла в теме нет, будет использован стандартный шаблон из ядра WordPress, расположенный по адресу /wp-includes/theme-compat/comments.php
.
Функция не выводит ничего, если вызвана на странице, которая не является записью (is_singular()
вернет false
), либо если у записи нет комментариев и они закрыты для добавления. Выводимый HTML-код зависит от содержимого файла comments.php
.
Важно
Функция выполняет ключевую операцию: извлекает комментарии из базы данных и сохраняет их в глобальную переменную, что позволяет функции wp_list_comments()
корректно выводить комментарии.
Вы можете использовать хук comments_template_query_args
для изменения параметров запроса комментариев.
Глобальные переменные, используемые функцией
- $withcomments (bool)
- $wp_query (WP_Query)
- $post (WP_Post)
- $wpdb (wpdb)
- $id (int)
- $comment (WP_Comment)
- $user_login (string)
- $user_ID (int)
- $user_identity (string)
- $overridden_cpage (bool)
Хуки
- comments_template_top_level_query_args
- comments_template_query_args
- comments_array
- comments_template
Возвращаемое значение
Функция не возвращает значение.
Базовое подключение комментариев
Стандартное использование функции для отображения комментариев:
<?php comments_template(); ?>
Подключение пользовательского шаблона комментариев
Вы можете подключить другой файл шаблона комментариев, указав его в параметре $file
:
<?php comments_template( '/short-comments.php' ); ?>
Если файл находится в подкаталоге темы, укажите путь относительно корня темы:
<?php comments_template( '/templates/my-comments.php' ); ?>
Изменение пути к файлу через фильтр
Используйте фильтр comments_template
для изменения пути к файлу шаблона:
add_filter( 'comments_template', 'genius_comment_template' );
function genius_comment_template( $comment_template ) {
global $post;
if ( !( is_singular() && ( have_comments() || 'open' == $post->comment_status ) ) ) {
return $comment_template;
}
// Если это тип записи 'book'
if ( $post->post_type == 'book' ) {
return __DIR__ . '/reviews.php'; // полный путь до файла
}
return $comment_template;
}
Использование в шаблоне single.php
Чаще всего функция используется в файле шаблона одиночного поста single.php
. Например, в стандартной теме WordPress Twenty Fourteen, функция используется следующим образом:
if ( comments_open() || get_comments_number() ) {
comments_template();
}
В данном примере проверяется, открыты ли комментарии к посту с помощью функции comments_open()
, либо есть ли хотя бы один комментарий с помощью функции get_comments_number()
. Если одно из условий выполняется, подключается шаблон комментариев.
Заключение
Функция comments_template()
играет важную роль в управлении комментариями на сайте WordPress. Она позволяет гибко настраивать вывод комментариев, поддерживая как стандартные, так и кастомные шаблоны, а также предоставляет возможности для изменения параметров запроса комментариев через хуки.