В WordPress стандартным механизмом для отзывов являются комментарии. Иногда возникает задача — отключить отображение и возможность оставлять отзывы (комментарии) для записей, принадлежащих определённой категории. Например, если у вас есть категория «Новости», и вы не хотите, чтобы пользователи могли оставлять отзывы к новостным публикациям.
Почему важно контролировать отзывы по категориям
Отзывы — это мощный инструмент вовлечения аудитории, но не всегда они уместны на всех типах контента. В некоторых случаях отзывы могут создавать дополнительную нагрузку на поддержку или портить восприятие, если тема информационная и не предполагает обсуждений.
Кроме того, отключение комментариев по категориям помогает избежать спама и повысить производительность сайта, так как не нужно загружать формы и скрипты на ненужных страницах.
Отключение комментариев по категории через код
Для решения задачи запрета отображения отзывов в определённой категории можно использовать фильтр comments_open, который отвечает за разрешение или запрет комментариев для конкретной записи.
Ниже пример функции, которая отключит комментарии для всех записей категории с ярлыком (slug) novosti:
function wpsource_disable_comments_by_category( $open, $post_id ) {
if ( ! $open ) {
return false;
}
$post = get_post( $post_id );
if ( has_category( 'novosti', $post ) ) {
return false;
}
return $open;
}
add_filter( 'comments_open', 'wpsource_disable_comments_by_category', 10, 2 );Этот код нужно добавить в файл functions.php активной темы или в плагин для пользовательских функций. Он проверяет, принадлежит ли запись категории novosti, и если да, то возвращает false, запрещая открывать комментарии.
Как проверить slug категории
Чтобы узнать slug категории, зайдите в админке WordPress в раздел «Записи» -> «Рубрики». Там в списке категорий вы увидите ярлык (slug) рядом с названием.
Отключение вывода формы и списка комментариев
Отключение возможности оставлять отзывы — это только часть задачи. Нужно также скрыть форму комментариев и список уже оставленных отзывов для выбранной категории.
Для этого можно модифицировать шаблоны темы, добавив проверку категории перед выводом комментариев. Пример для файла comments.php:
if ( ! has_category( 'novosti' ) ) {
comments_template();
}Или внутри single.php добавить условие:
if ( comments_open() && ! has_category( 'novosti' ) ) {
comments_template();
}Если вы используете тему с поддержкой современных хуков, можно применить фильтр comments_template для более гибкого управления.
Использование плагинов для управления комментариями по категориям
Если вы не хотите касаться кода, некоторые плагины позволяют управлять комментариями более гибко:
- Disable Comments — позволяет отключить комментарии глобально или по типам записей, но не всегда по категориям, поэтому стоит проверить совместимость.
- WP Comment Control — более гибкий плагин, который может ограничивать комментарии и отзывы по категориям.
- Clearfy Pro — расширенный набор инструментов оптимизации, включая управление комментариями. В Clearfy можно настроить фильтрацию комментариев и отключение по категориям с удобным интерфейсом.
Дополнительные советы по работе с отзывами в WordPress
Чтобы полностью контролировать отзывы, полезно учитывать следующие моменты:
- Проверьте, что в настройках WordPress (Настройки -> Обсуждение) отключены комментарии на страницах, где они не нужны.
- Используйте фильтр
wpsource_disable_comments_by_categoryвместе с проверками для кастомных типов записей, если они есть. - Для ускорения сайта отключайте загрузку скриптов и стилей, связанных с комментариями на страницах без отзывов.
- Если на сайте много категорий с различными требованиями, рассмотрите написание расширенного плагина с настройками для админки.
Пример расширенной функции с кешированием результата
Для повышения производительности можно кэшировать результат проверки категории для каждой записи:
function wpsource_disable_comments_by_category_cached( $open, $post_id ) {
static $cache = array();
if ( isset( $cache[ $post_id ] ) ) {
return $cache[ $post_id ];
}
if ( ! $open ) {
$cache[ $post_id ] = false;
return false;
}
$post = get_post( $post_id );
if ( has_category( 'novosti', $post ) ) {
$cache[ $post_id ] = false;
return false;
}
$cache[ $post_id ] = $open;
return $open;
}
add_filter( 'comments_open', 'wpsource_disable_comments_by_category_cached', 10, 2 );Это особенно полезно на сайтах с большим числом записей и частыми проверками.
Итог
Запрет отображения отзывов по категории — частая задача для администраторов WordPress-сайтов. С помощью фильтра comments_open и проверки категории можно легко реализовать эту функциональность без плагинов или с минимальным их использованием.
Если нужно более комплексное решение с настройками в админке, рассмотрите плагины вроде Clearfy Pro. Это упростит управление и повысит безопасность сайта.