Полное отключение комментариев в WordPress
Если ваш сайт на WordPress не использует комментарии, то отключение всех связанных функций может сделать панель администратора более понятной и улучшить производительность сайта. В этой статье мы рассмотрим, как полностью отключить комментарии в WordPress.
Почему отключать комментарии?
У вас может быть сайт, где комментарии не нужны. В таком случае на админ-панели будут присутствовать следующие элементы:
- Пункт меню комментариев;
- Элементы в панели инструментов (админ-бар);
- Блоки комментариев в редакторе;
- Возможность отправки комментариев через POST/REST запросы.
Отключение комментариев с помощью плагина
Чтобы полностью отключить функциональность комментариев в WordPress, вы можете использовать плагин:
- Полная версия в репозитории WP: Disable Comments
- Версия без настроек для mu-plugins: Disable Comments MU
Отключение комментариев через код
Если вы хотите отключить комментарии программно, вы можете использовать следующий код. Он немного изменён из плагина Disable Comments MU, чтобы его можно было использовать как отдельный файл.
Создайте файл disable-comments.php
в папке wp-content/mu-plugins
и вставьте в него следующий код:
<?php
/**
- Плагин: Disable Comments (Must Use version)
- Описание: Отключает все функции комментариев WordPress на всей сети.
- Версия: 1.1.2
- Автор: WPDeveloper
*/
defined( 'ABSPATH' ) || exit;
new Disable_WP_Comments();
class Disable_WP_Comments {
public function __construct() {
// Эти действия должны выполниться сейчас
add_action( 'widgets_init', [ $this, 'disable_rc_widget' ] );
add_filter( 'wp_headers', [ $this, 'filter_wp_headers' ] );
add_action( 'template_redirect', [ $this, 'filter_query' ], 9 ); // перед redirect_canonical
// Фильтрация админ-бара
add_action( 'add_admin_bar_menus', [ $this, 'filter_admin_bar' ], 0 );
add_action( 'admin_init', [ $this, 'filter_admin_bar' ] );
// Эти действия могут выполниться позже
add_action( 'wp_loaded', [ $this, 'setup_filters' ] );
add_action( 'enqueue_block_editor_assets', [ $this, 'filter_gutenberg_blocks' ] );
add_filter( 'rest_endpoints', [ $this, 'filter_rest_endpoints' ] );
add_filter( 'xmlrpc_methods', [ $this, 'disable_xmlrc_comments' ] );
add_filter( 'rest_pre_insert_comment', [ $this, 'disable_rest_api_comments' ], 10, 2 );
add_filter( 'comments_array', '__return_empty_array', 20 );
}
public function setup_filters() {
$types = array_keys( get_post_types( [ 'public' => true ], 'objects' ) );
if ( ! empty( $types ) ) {
foreach ( $types as $type ) {
// Убираем поддержку комментариев
if ( post_type_supports( $type, 'comments' ) ) {
remove_post_type_support( $type, 'comments' );
remove_post_type_support( $type, 'trackbacks' );
}
}
}
// Фильтры только для админов
if ( is_admin() ) {
add_action( 'admin_menu', [ $this, 'filter_admin_menu' ], 9999 );
add_action( 'admin_print_styles-index.php', [ $this, 'admin_css' ] );
add_action( 'admin_print_styles-profile.php', [ $this, 'admin_css' ] );
add_action( 'wp_dashboard_setup', [ $this, 'filter_dashboard' ] );
add_filter( 'pre_option_default_pingback_flag', '__return_zero' );
} else {
// Фильтры только для фронтенда
add_action( 'template_redirect', [ $this, 'check_comment_template' ] );
add_filter( 'comments_open', '__return_false', 20 );
add_filter( 'pings_open', '__return_false', 20 );
}
}
public function check_comment_template() {
if ( is_singular() ) {
add_filter( 'comments_template', '__return_empty_string', 20 );
wp_deregister_script( 'comment-reply' );
}
}
public function filter_wp_headers( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
}
public function filter_query() {
if ( is_comment_feed() ) {
wp_die( esc_html__( 'Комментарии закрыты.' ), '', [ 'response' => 403 ] );
}
}
public function filter_admin_bar() {
remove_action( 'admin_bar_menu', 'wp_admin_bar_comments_menu', 60 );
}
public function filter_admin_menu() {
global $pagenow;
if ( in_array( $pagenow, [ 'comment.php', 'edit-comments.php', 'options-discussion.php' ], true ) ) {
wp_die( esc_html__( 'Комментарии закрыты.' ), '', [ 'response' => 403 ] );
}
remove_menu_page( 'edit-comments.php' );
remove_submenu_page( 'options-general.php', 'options-discussion.php' );
}
public function filter_dashboard() {
remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
}
public function admin_css() {
?>
403 ] );
}
}
Итог
Теперь функциональность комментариев в WordPress отключена. Вы можете убедиться, что комментарии больше не отображаются и не принимаются на вашем сайте, что позволит улучшить его производительность и предоставить пользователям чистый интерфейс.