Функция comments_open()
проверяет, открыты ли комментарии для указанного поста или записи в WordPress. Она возвращает true
, если комментарии разрешены, и false
, если они отключены. Эта функция полезна для разработчиков тем и плагинов, позволяя динамически управлять отображением формы комментариев.
comments_open( int|WP_Post $post = null ): bool
Функция может принимать ID записи или объект записи WP_Post
в качестве параметра, но если параметр не указан, проверка производится для текущего поста.
Примечание: Функция использует объект записи и может работать медленнее на больших объёмах данных. Для улучшения производительности используйте кеширование или фильтры.
Параметры
$post
(необязательный, тип:int|WP_Post
) — ID поста или объект записиWP_Post
. По умолчанию проверяет текущий пост.
Возвращаемое значение
bool
— Возвращаетtrue
, если комментарии к записи открыты, иfalse
, если комментарии закрыты.
Пример 1: Проверка, открыты ли комментарии для поста
Этот пример показывает, как проверить, разрешены ли комментарии к записи, и если да — вывести шаблон комментариев:
if ( comments_open( $post->ID ) ) {
comments_template();
}
Здесь, если функция возвращает true
, шаблон комментариев (comments_template) будет загружен и выведен на странице.
Пример 2: Отключение комментариев для всех страниц
Этот пример демонстрирует, как с помощью фильтра comments_open
отключить комментарии для всех постоянных страниц (записей типа page
):
add_filter( 'comments_open', 'disable_comments_on_pages', 10, 2 );
function disable_comments_on_pages( $open, $post_id ) {
$post = get_post( $post_id );
if ( 'page' === $post->post_type ) {
$open = false;
}
return $open;
}
Теперь, если комментарии на страницах будут проверяться с помощью функции comments_open()
, они всегда будут закрыты, даже если включены в админке.
Пример 3: Динамическое включение комментариев для старых постов
Этот пример иллюстрирует, как с помощью пользовательского поля включить комментарии для постов, которые по умолчанию имеют отключенные комментарии из-за возраста:
add_filter( 'comments_open', 'enable_comments_for_old_posts', 10, 2 );
function enable_comments_for_old_posts( $open, $post_id ) {
$post = get_post( $post_id );
// Проверяем наличие произвольного поля 'Allow Comments'
if ( get_post_meta( $post->ID, 'Allow Comments', true ) ) {
$open = true;
}
return $open;
}
В этом примере, если у записи установлено произвольное поле Allow Comments
со значением 1
, комментарии будут включены, даже если они были отключены для старых записей.
Пример 4: Подключение скрипта только для постов с открытыми комментариями
Иногда необходимо подключать скрипты только тогда, когда на странице поста разрешены комментарии. Вот как это сделать:
function enqueue_script_if_comments_open() {
if ( is_single() && comments_open() ) {
// Предполагается, что скрипт зарегистрирован через wp_register_script()
wp_enqueue_script( 'my_custom_script' );
}
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_comments_open' );
В этом примере скрипт подключается только тогда, когда отображается одиночный пост (is_single()
) и комментарии к нему открыты.
Заключение
Функция comments_open()
в WordPress предоставляет простой и удобный способ проверять статус комментариев для любого поста или записи. Используя её в сочетании с фильтрами, можно гибко управлять настройками комментариев на вашем сайте.