Отключение сервисов WordPress: полное руководство по ускорению сайта

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

Зачем отключать ненужные сервисы?

Каждый активный модуль добавляет HTTP‑запросы, генерирует лишний HTML/JS и увеличивает объём памяти, используемой PHP. Отключив их, вы получаете:

  • Сокращение количества запросов к серверу (до 15 % экономии).
  • Уменьшение времени генерации страницы (до 30 % ускорения в тяжёлых темах).
  • Повышение уровня безопасности – меньше точек входа для атак.

Если вы уже оптимизировали кеширование (сравнение кэш‑плагинов WordPress) и ускорили админку (15 проверенных способов), то следующий шаг – отключить лишние сервисы.

Отключение REST API

REST API используется плагинами и мобильными приложениями, но если вы не планируете внешние запросы, его можно отключить.

Код для functions.php

add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
// Отключаем доступ к /wp-json/ для неавторизованных пользователей
add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result; // Уже есть ошибка
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_forbidden', 'REST API отключён.', array( 'status' => 403 ) );
    }
    return $result;
});

После добавления кода запросы к /wp-json/ вернут 403, а плагины, которым нужен API, можно будет включить отдельным фильтром.

Отключение эмодзи

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

Код отключения

remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
add_filter( 'emoji_svg_url', '__return_false' );

Эти строки полностью убирают загрузку wp-emoji-release.min.js и связанных стилей.

Отключение oEmbed

Функция oEmbed автоматически встраивает видео и посты с внешних сервисов. Если вы не используете автоподстановку, её лучше отключить.

Код отключения

// Отключаем авто‑вставку oEmbed
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'embed_oembed_discover', '__return_false' );
add_filter( 'tiny_mce_plugins', function( $plugins ) {
    return array_diff( $plugins, array( 'wpembed' ) );
});

Если позже понадобится отдельный embed‑плейер, его можно включить через фильтр embed_oembed_discover.

Отключение XML‑RPC

XML‑RPC использовался для удалённого публикации и мобильных приложений, но в современных версиях WordPress его роль почти исчезла.

Самый простой способ

add_filter( 'xmlrpc_enabled', '__return_false' );

Для полной блокировки можно добавить правило в .htaccess:

# Блокируем XML-RPC

RewriteEngine On
RewriteRule ^xmlrpc.php$ - [F,NC]

Это предотвратит любые попытки доступа к xmlrpc.php, повышая безопасность.

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

Если ваш проект не предполагает пользовательские обсуждения, комментарии – лишний груз.

Удаляем UI и API

// Отключаем поддержку комментариев в типах записей
function disable_comments_post_type_support() {
    $post_types = get_post_types();
    foreach ( $post_types as $type ) {
        remove_post_type_support( $type, 'comments' );
        remove_post_type_support( $type, 'trackbacks' );
    }
}
add_action( 'admin_init', 'disable_comments_post_type_support' );

// Закрываем REST‑эндпоинты комментариев
add_filter( 'rest_endpoints', function( $endpoints ) {
    if ( isset( $endpoints['/wp/v2/comments'] ) ) {
        unset( $endpoints['/wp/v2/comments'] );
    }
    return $endpoints;
});

// Убираем скрипты и стили комментариев
function dequeue_comment_scripts() {
    wp_dequeue_script( 'comment-reply' );
}
add_action( 'wp_print_scripts', 'dequeue_comment_scripts', 100 );

После этого в админке исчезнут разделы «Комментарии», а фронтенд больше не будет загружать comment-reply.js. Если в дальнейшем понадобится включить их – просто удалите эти строки.

Прочие сервисы, которые часто отключают

  • Heartbeat API – отправляет AJAX‑запросы каждые 15 сек. Отключить можно через плагин или код add_filter('heartbeat_send', '__return_false');.
  • RSS‑ленты – если не нужны, отключаем remove_action('wp_head','feed_links_extra',3); и remove_action('wp_head','feed_links',2);.
  • Скрипты Gutenberg в админке – если вы используете классический редактор, отключите add_filter('use_block_editor_for_post','__return_false');.

Эти мелочи помогают сократить количество загружаемых файлов и снижают нагрузку на сервер.

Проверяем результат

После всех правок проверьте сайт с помощью инструментов аудита или онлайн‑сканеров (GTmetrix, PageSpeed Insights). Обратите внимание на показатель Time to First Byte и общее время загрузки – они должны уменьшиться.

В комбинации с кэшированием (сравнение кэш‑плагинов) и оптимизацией WooCommerce (7 проверенных методов) вы получите максимально быстрый и безопасный WordPress‑сайт.

❓ Часто задаваемые вопросы

Можно ли отключить REST API только для гостей, оставив его для администраторов?

Да, в примере кода используется фильтр rest_authentication_errors, который возвращает ошибку только если пользователь не авторизован.

Влияет ли отключение эмодзи на отображение символов в контенте?

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

Нужно ли полностью удалять файл xmlrpc.php?

Удалять файл не рекомендуется, так как обновления могут его восстановить. Достаточно отключить обработку через фильтр и .htaccess.

Как проверить, что комментарии действительно отключены?

Откройте консоль браузера и убедитесь, что запросы к /wp-json/wp/v2/comments не отправляются, а скрипт comment-reply.js не загружается.