Иногда возникает необходимость отключить комментарии на отдельных страницах сайта WordPress, чтобы избежать спама или сохранить дизайн без секции отзывов. В этой статье рассмотрим несколько способов решения этой задачи, включая использование кода в functions.php и популярных плагинов.
Почему важно отключать комментарии на отдельных страницах
Комментарии полезны для блогов и новостных сайтов, но не всегда уместны на страницах с контактами, политикой конфиденциальности или лендингах. Отключение комментариев улучшает UX, уменьшает нагрузку на базу данных и снижает количество спама.
Кроме того, если комментарии отключены на уровне сайта, но активны на отдельных страницах, это может вызвать путаницу для пользователей.
Отключение комментариев через админ-панель WordPress
Самый простой способ — зайти в редактор нужной страницы:
- Откройте страницу в редакторе WordPress.
- В разделе «Обсуждение» снимите галочку «Разрешить комментарии».
- Обновите страницу.
Если блок «Обсуждение» не отображается, включите его через меню «Настройки экрана» в правом верхнем углу.
Этот способ удобен для нескольких страниц, но при большом количестве страниц станет неудобным.
Отключение комментариев на конкретных страницах через functions.php
Для массового и автоматического решения можно добавить следующий код в файл functions.php вашей темы или дочерней темы:
function wpskills_disable_comments_on_pages() {
if (is_page(array(42, 'kontakt', 'privacy-policy'))) {
// Отключаем вывод комментариев
remove_post_type_support('page', 'comments');
}
}
add_action('init', 'wpskills_disable_comments_on_pages');
function wpskills_hide_comments_template($open, $post_id) {
if (is_page(array(42, 'kontakt', 'privacy-policy'))) {
return false;
}
return $open;
}
add_filter('comments_open', 'wpskills_hide_comments_template', 10, 2);
add_filter('pings_open', 'wpskills_hide_comments_template', 10, 2);В этом примере отключаются комментарии на страницах с ID 42, а также с ярлыками (slug) 'kontakt' и 'privacy-policy'. Замените их на нужные вам идентификаторы или слаги.
Код удаляет поддержку комментариев и отключает их открытие, что полностью скрывает форму и список комментариев.
Объяснение кода
remove_post_type_support('page', 'comments')— отключает поддержку комментариев для типа записи page на инициализации.- Фильтры
comments_openиpings_openвозвращают false для выбранных страниц, что блокирует возможность добавления новых комментариев и пингов.
Использование плагинов для отключения комментариев на отдельных страницах
Если вы предпочитаете не править код, можно использовать плагины. Вот несколько популярных вариантов:
- Disable Comments — позволяет отключать комментарии глобально или на выбранных типах записей. В расширенных настройках можно выбрать страницы.
- WP Disable Comments — простой плагин с опцией отключения комментариев на отдельных страницах.
- Clearfy Pro — многофункциональный плагин оптимизации, который также позволяет управлять комментариями и отключать их выборочно. Подробнее на wpshop.ru.
Автоматическое отключение комментариев на страницах с определенной меткой
Иногда удобнее отключать комментарии не по ID, а по метке (custom field) или категории. Например, можно создать пользовательское поле disable_comments со значением true на нужных страницах и отключать комментарии программно:
function wpskills_disable_comments_if_meta($open, $post_id) {
$disable = get_post_meta($post_id, 'disable_comments', true);
if ($disable === 'true' && get_post_type($post_id) === 'page') {
return false;
}
return $open;
}
add_filter('comments_open', 'wpskills_disable_comments_if_meta', 10, 2);
add_filter('pings_open', 'wpskills_disable_comments_if_meta', 10, 2);Этот метод удобен для гибкого управления состоянием комментариев без изменения кода при каждом изменении.
Удаление уже существующих комментариев с отключенных страниц
Если на странице уже есть комментарии, их можно удалить через админку вручную или программно:
function wpskills_delete_comments_on_pages() {
$pages = array(42, 'kontakt', 'privacy-policy');
foreach ($pages as $page) {
$page_id = is_numeric($page) ? $page : get_page_by_path($page)->ID;
$comments = get_comments(array('post_id' => $page_id));
foreach ($comments as $comment) {
wp_delete_comment($comment->comment_ID, true);
}
}
}
// Запускать один раз вручную
// add_action('init', 'wpskills_delete_comments_on_pages');Не забудьте закомментировать или удалить вызов после использования, чтобы не удалять комментарии постоянно.
Вывод
Отключение комментариев на отдельных страницах WordPress — частая задача, которую можно решить разными способами: вручную через админку, программно через functions.php или с помощью плагинов. Выбор зависит от количества страниц и ваших предпочтений. Важно также удалить или скрыть уже существующие комментарии, чтобы не создавать визуального мусора.