В WordPress нет одной настройки, которая автоматически закроет комментарии у всех уже опубликованных материалов. Настройка в разделе обсуждений меняет поведение новых записей, а существующие записи и страницы нужно закрывать отдельно. Если требуется жёстко запретить комментарии независимо от статуса конкретного материала, можно добавить небольшой PHP-фрагмент.
Сначала определите, что именно нужно отключить: новые комментарии по умолчанию, комментарии у уже созданного контента или саму возможность комментирования на выбранных типах записей. Эти задачи решаются разными способами, и удалять старые комментарии для отключения новых не требуется.
Отключите комментарии для новых записей
В административной панели откройте Настройки → Обсуждение и снимите флажок «Разрешить оставлять комментарии к новым записям». Сохраните изменения. После этого WordPress будет создавать новые записи с закрытыми комментариями по умолчанию.
Эта настройка не закрывает обсуждения у материалов, опубликованных раньше. Кроме того, автор может изменить статус комментариев у отдельной записи, если в редакторе доступен соответствующий блок. Поэтому настройка подходит для изменения значения по умолчанию, но не для полного отключения уже открытых обсуждений.
Закройте комментарии у существующих записей и страниц
Для отдельных типов контента удобнее использовать массовое редактирование. Откройте, например, Записи → Все записи, отметьте нужные материалы, выберите в списке действий пункт Изменить и нажмите «Применить». В появившихся настройках найдите поле «Комментарии», установите «Запретить» и сохраните изменения кнопкой «Обновить».
Повторите те же действия для страниц через Страницы → Все страницы. Массовое редактирование меняет статус выбранных материалов, но обычно действует только на элементы текущей страницы списка. Если записей много, проверьте остальные страницы списка и повторите операцию.
У пользовательского типа записей этот способ доступен, если для него выведен список в админ-панели и включено массовое редактирование. Название пункта меню зависит от сайта и зарегистрированного типа контента. Если поля «Комментарии» нет, используйте фильтр по типу записи из следующего раздела.
Запретите комментарии на выбранных типах контента кодом
Фильтр подходит, когда комментарии должны быть закрыты на всех записях определённых типов, в том числе уже опубликованных. В примере ниже комментарии и pingback отключаются для обычных записей, страниц и пользовательского типа event. Замените event на системное имя своего типа контента: это не обязательно название, которое отображается в меню админ-панели.
<?php
function wpeasy_disable_comments_for_types( $open, $post_id ) {
$disabled_types = array( 'post', 'page', 'event' );
if ( in_array( get_post_type( $post_id ), $disabled_types, true ) ) {
return false;
}
return $open;
}
add_filter( 'comments_open', 'wpeasy_disable_comments_for_types', 20, 2 );
add_filter( 'pings_open', 'wpeasy_disable_comments_for_types', 20, 2 );Если требуется закрыть комментарии только у страниц, оставьте в массиве array( 'page' ). Чтобы закрыть их у всех типов контента, добавьте в список все нужные системные имена, включая пользовательские. Типы, которых нет в массиве, сохранят прежнее поведение.
Добавьте фрагмент в файл дочерней темы functions.php или в собственный плагин для сайта. Не вставляйте его в родительскую тему: обновление темы может удалить изменения. Если после добавления сайт выдаёт ошибку, удалите фрагмент через файловый менеджер хостинга или FTP и проверьте синтаксис PHP; перед правкой файла сохраните его копию.
Полностью закройте комментарии на сайте
Если нужно запретить комментирование на всех типах записей, включая пользовательские, вместо выборочного фильтра используйте глобальные фильтры. Они закрывают комментарии и pingback независимо от значения, сохранённого у конкретной записи.
<?php
add_filter( 'comments_open', '__return_false', 20 );
add_filter( 'pings_open', '__return_false', 20 );Этот вариант запрещает добавлять новые комментарии, но не удаляет уже сохранённые и сам по себе не скрывает их на сайте. Если прежние комментарии должны оставаться видимыми, больше ничего делать не нужно. Если нужно убрать и их вывод, потребуется настройка шаблона темы: разные темы выводят список комментариев по-разному. Закрытие обсуждений и удаление старых комментариев — отдельные действия; не удаляйте записи из базы данных, если хотите сохранить историю обсуждений.
Как проверить, что комментарии отключены
Откройте несколько материалов на сайте и проверьте разные сценарии: запись, страницу и, если есть, пользовательский тип. Убедитесь, что форма отправки комментария недоступна. Для материалов с уже опубликованными комментариями отдельно проверьте, должны ли они оставаться видимыми.
В админ-панели откройте редактирование материала и проверьте его статус обсуждения. При использовании фильтра статус в интерфейсе может по-прежнему показывать сохранённое значение, но фильтр не даст открыть комментарии на сайте. Поэтому окончательная проверка — не только значение в редакторе, но и поведение страницы для посетителя.
Настройка обсуждений влияет на значение по умолчанию, массовое редактирование меняет статус выбранных материалов, а PHP-фильтр принудительно закрывает комментирование по типу контента или на всём сайте. Выберите один подход или сочетайте их: например, настройте значение по умолчанию и добавьте фильтр, если комментарии должны быть запрещены без исключений.