Alex Haleev — Новости, статьи и сервисы
Как отключить комментарии в WordPress
Alex Haleev • 08.11.2023

Довольно часто возникает потребность отключать стандартные комментарии WP в особенности для сайта компании или для разных клиентских проектов. Особенно полезным будет профилактика или защита от спама, которая очень сильно атакует сайт ботами через форму комментариев в вордпресе.

В статье будут примеры того, как отключить возможность комментирования как в целом на всем сайте для CMS WordPress, так и разные методы точечного отключения комментов во всех постах или только в некоторых записях, категориях записей или по ID.

Оглавление:

Полное отключение всех комментариев в WordPress через админку сайта

Через админку вордпреса можно деактивировать возможность комментирования полностью. Для этого необходимо выполнить следующие действия:

Теперь никто не сможет оставлять комментарии на сайте. Такой метод подойдет в том случае, если никто кроме вас не будет лазить по админке и клацать разные кнопки не понимая что он делает и зачем. Если же в панель администратора заходят и другие пользователи с полным доступом админа можно перестраховаться и полностью через код деактивировать комментрии на сайте, а также скрыть раздел настроек коментов и обсуждения в админке сайта.

Полное отключение комментариев на сайте через код:

Данный код полностью закроет возможность оставлять комментарии и что немаловажно скроет в меню администратора все настройки обсуждения и комментирования для сайта.

// Отключение комментариев на всем сайте
function disable_comments_site_wide() {
    // Закрыть комментарии на всех страницах и записях
    add_filter( 'comments_open', '__return_false', 20, 2 );
    add_filter( 'pings_open', '__return_false', 20, 2 );

    // Скрыть раздел обсуждения в админ-панели
    add_action( 'admin_menu', function() {
        remove_menu_page( 'edit-comments.php' );
    });
}
add_action( 'init', 'disable_comments_site_wide' );

P.S. Рекомендую данный метод для спокойствия души и во избежание нежелательных нажатий от любопытных сотрудников 😀.

Отключение комментариев для отдельных записей и страниц в Вордпрес через админку

Отключить комментарии можно и выборочно, например, вы хотите чтобы часть ваших страниц имела комментарии, а для отдельных страниц коменты были деактивированы. Можно сделать это также легко и быстро через админку сайта выборно или же сразу для списка страниц. Вот так это делается:

Если вам нужно вывбрать сразу несколько страниц чтобы отключить для них комментирование, вы можете сделать следующее:

После чего на выбранных страницах пропадет возможность оставлять комментарии.

Лайфхак для тех, у кого очень много статей, но хочется сделать это максимально быстро и удобно.

В разделе страницы или записи тыкаем на кнопку «настройки экрана» и меняем «количество элементов на странице» на необходимое, изначально стоит 20, мы может установить любое нужно нам значение, например 100.

Лайфках годный до тех пор пока у вас несколько сотен постов, после отметки в 1000+ записей показывать это все на одной странице будет мягко скажем заторможено. В общем не советую так делать если у вас овердопупа статей.

Отключение комментариев для отдельных записей и страниц по идентификатору id в коде

Не знаю кому данный способ понадобится, все тоже самое можно сделать через админку, но и через код также можно отключить комменты. Мне никогда данный способ не пригождался, если комуто будет полезно — отпишитесь в комментарии в каких случаях вам это пригодилось?

// Отключение комментариев для определенной страницы по ID
function disable_comments_on_specific_page( $open, $post_id ) {
    if ( $post_id == 123 ) {  // замените 123 на ID вашей страницы
        return false;
    }
    return $open;
}
add_filter( 'comments_open', 'disable_comments_on_specific_page', 10, 2 );

Отключение комментариев wordperess для определенных типов записей

Этот способ действительно актуальный когда у вас есть раздел блога с типом записей post и там должны быть комментарии. И есть обычные страницы, где тип записей page и комментарии не нужны.

function disable_comments_for_cpt( $open, $post_id ) {
    $post_type = get_post_type( $post_id );
    // Замените 'your_custom_post_type' на идентификатор вашего типа записи
    if ( $post_type == 'your_custom_post_type' ) {
        return false;
    }
    return $open;
}
add_filter( 'comments_open', 'disable_comments_for_cpt', 10, 2 );

Отключение комментариев для определенных таксономий WP

Подойдет для тех, кто использует готовые темы или работает с чужим кодом. Потому как изначально у таксономий нет встроенного функционала, который позволяет оставлять комментарии. Реальный пример это интернет магазин на wordpress в котором есть возможность комментировать категории товаров (странно, но и так тоже можно). Не советую вообще использовать готовые темы, но если так случилось, то пользуйтесь.

function disable_comments_for_taxonomy( $open, $post_id ) {
    $taxonomies = get_post_taxonomies( $post_id );
    // Замените 'your_taxonomy' на идентификатор вашей таксономии
    if ( in_array( 'your_taxonomy', $taxonomies ) ) {
        return false;
    }
    return $open;
}
add_filter( 'comments_open', 'disable_comments_for_taxonomy', 10, 2 );

Отключение комментариев для определенных категорий постов Вордпрес

Например у вас есть раздел статей или блог с разными категорями и не везде нужны комментарии. В таком случае вы можете запретить обсуждение для отдельных категорий. Главное правильно указать название ‘slug‘ категории.

function disable_comments_for_category( $open, $post_id ) {
    $categories = get_the_category( $post_id );
    foreach ( $categories as $category ) {
        // Замените 'your_category_slug' на ярлык вашей категории
        if ( $category->slug == 'your_category_slug' ) {
            return false;
        }
    }
    return $open;
}
add_filter( 'comments_open', 'disable_comments_for_category', 10, 2 );

В каждом из этих примеров кода замените 'your_custom_post_type', 'your_taxonomy' или 'your_category_slug' на соответствующие идентификаторы в вашем сайте WordPress. Эти фрагменты кода проверяют тип записи, таксономии или категории текущего поста, и если они соответствуют указанным вами, комментарии будут отключены.

Удаляем код который выводит комментари в шаблоне записи singl.php

Данную процедуру лучше проделывать в дочерней теме или если вы создали собственную тему и редактируете ее. Если же вы используете купленную или беслатную тему — создайте свою дочернюю тему и удаляйте код отвечающий за вывод комменатрий в ней. Иначе после обновления темы, внесенные вами изменения исчезнут.

Файл в котором находится код вывода комментов wp по в дефолтных темах называется singl.php и находится он в папке вашей темы по адресу ‘ваш-сайт/wp-content/themes/ваша-тема/single.php’

Откроем данный файл через стандартный функционал админки WP. Перейдем в раздел внешний вид -> Редактор тем.

Затем выберем нужный нам файл под названием отдельная запись или single.php и удалим следующий код:

Примечание. Если вы работаете с готовой темой или дорабатываете за кем-то чужой код, вариацый вывода комментариев в шаблоне записи может несколько, вот основные из них:

Это стандартный метод вывода комментариев в WordPress

<?php
comments_template();
?>

Использование функции comment_form():

<?php
comment_form();
wp_list_comments();
?>

Это функция, которая выводит форму комментариев, и ее можно использовать вместе с wp_list_comments() для вывода существующих комментариев.

Использование шорткода [comments]:

<?php
echo do_shortcode('[comments]');
?>

В некоторых темах или плагинах может быть встроен шорткод для вывода комментариев.

Использование пользовательского цикла для комментариев

Это простой пример того, как можно построить свой собственный цикл вывода комментов. У вас код может отличаться, это простой пример чтобы ориентироваться, если вы наткнетесь на что-то подобное.

<?php
$args = array(
    'post_id' => get_the_ID(),
);
$comments = get_comments($args);
wp_list_comments(array(), $comments);
?>

Использование хуков и фильтров для вывода комментариев в WordPress

Данный хук может быть в файле function.php или подключен отдельным файлом и выглядеть следующим образом:

<?php
add_filter('comments_array', 'my_custom_comments_array', 10, 2);
function my_custom_comments_array($comments, $post_id) {
    // ваш код для изменения массива комментариев
    return $comments;
}
comments_template();
?>

Удаление всех комментариев с сайта и очистка базы данных WordPress

Ну и финальные штрихи для тех у кого уже была целая гора комментов и после того как мы закрыли возможность комментирования — нам осталось почистить сайт и базу данных WP от лишнего мусора. Далее рассмотрим 2 варианта: через SQL запрос и через файл function.php

SQL-запрос для очистки базы данных от комментариев WP

-- Удалить все комментарии
DELETE FROM wp_comments;

-- Очистить таблицу метаданных комментариев
DELETE FROM wp_commentmeta;

-- Оптимизировать таблицы
OPTIMIZE TABLE wp_comments, wp_commentmeta;

Очистка базы данных от комментариев через файл functions.php

Данный код необходимо добавить в самый низ файла functions.php вашей темы, сохранить изменения, подождать несколько минут, затем проверить удалились ли ваши комментарии с сайта. После того как комменты будут удалены с сайты — данный код необходимо удалить.

function delete_all_comments() {
    global $wpdb;
    $wpdb->query( "TRUNCATE TABLE $wpdb->comments" );
    $wpdb->query( "TRUNCATE TABLE $wpdb->commentmeta" );
}
add_action( 'init', 'delete_all_comments' );

Финалочка

Отключение комментариев в WordPress — это эффективный способ борьбы со спамом и наведения порядка на сайте. Выбирайте какой подхом вам больше нравится и забудьте навсегда о проблемах со спамом.