Как отключить emoji и oEmbed в WordPress без поломки контента и админки

В WordPress есть две мелкие, но часто лишние вещи: поддержка emoji через отдельный скрипт и автоподстановка внешних ссылок через oEmbed. На небольшом сайте это не выглядит проблемой, но на проектах с аккуратной технической оптимизацией такие детали быстро превращаются в лишние запросы, лишний код в <head> и непредсказуемое поведение при вставке ссылок.

Задача здесь не в том, чтобы «всё отключить», а в том, чтобы убрать только то, что реально не используется. Если у вас редакторы вставляют ссылки на YouTube, X/Twitter или другие сервисы, oEmbed может быть полезен. Если же контент уже встраивается вручную или через отдельный блок/плагин, встроенный механизм WordPress часто только мешает.

Когда это вообще нужно отключать

Сначала стоит понять, есть ли у вас реальная проблема. Отключение emoji и oEmbed имеет смысл, если вы видите хотя бы один из этих сценариев:

  • в <head> грузится wp-emoji-release.min.js, хотя emoji-замена в браузере не нужна;
  • на фронтенде есть лишние DNS-запросы к s.w.org или похожим доменам, связанным с oEmbed;
  • в редакторе Gutenberg вставка ссылки автоматически превращается в embed, хотя это не требуется;
  • вы хотите сократить количество подключаемых скриптов в теме без вмешательства в шаблоны;
  • на сайте есть строгая политика по внешним запросам и вы контролируете каждый сторонний ресурс.

Что именно делает WordPress по умолчанию

Emoji-поддержка добавляет JS и inline-логику для старых браузеров. oEmbed подключает discovery-мета и связанные скрипты, чтобы WordPress мог распознавать внешние сервисы и подставлять их превью. Для современного сайта это не всегда оправдано.

Важно не путать отключение oEmbed с запретом встраивания контента вообще. Если вы отключите WordPress-механику, это не сломает уже вставленные iframe-коды вручную. Но если редакторы привыкли просто вставлять ссылку на видео и ждать автоподстановки, поведение изменится.

Диагностика: что проверить до правки кода

Перед изменениями откройте исходный код страницы и проверьте, есть ли там лишние подключения. Ищите:

  • wp-emoji-release.min.js;
  • wp-embed.min.js;
  • emoji в inline-скриптах;
  • мета-тег <link rel="https://api.w.org/"> сам по себе нормален, но не связан с задачей;
  • лишние запросы в DevTools > Network при загрузке страницы.

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

Пошаговое решение через functions.php или mu-plugin

Самый предсказуемый способ — добавить код в дочернюю тему или в mu-plugin. Для технической правки mu-plugin удобнее: он не зависит от смены темы и загружается всегда.

1. Отключаем emoji

Этот код убирает фронтенд- и админские emoji-скрипты, а также фильтры, которые подмешивают дополнительные теги:

<?php
add_action( 'init', function() {
    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' );
    remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
} );

Если у вас есть старые браузеры или специфическая аудитория, проверьте, не завязан ли контент на emoji-замену. В обычной практике это редко критично.

2. Отключаем oEmbed на фронтенде

Для большинства сайтов достаточно убрать скрипт и discovery-мета:

<?php
add_action( 'init', function() {
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );
} );

Если нужно убрать и саму обработку embed в контенте, можно отключить фильтр oEmbed:

<?php
add_action( 'init', function() {
    global $wp_embed;
    remove_filter( 'the_content', array( $wp_embed, 'autoembed' ), 8 );
    remove_filter( 'widget_text_content', array( $wp_embed, 'autoembed' ), 8 );
} );

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

3. Если нужен более мягкий вариант

Иногда лучше не отключать всё сразу, а оставить только то, что реально используется. Например, можно убрать emoji, но оставить oEmbed для редактора. Или наоборот — отключить автоподстановку на фронтенде, но не трогать административные сценарии.

ПодходЧто делаетКогда выбирать
Код в теме/mu-pluginТочечное отключение нужных функцийКогда нужен контроль и предсказуемость
Плагин оптимизацииЧасто отключает сразу несколько мелких вещейКогда уже есть инструмент для чистки фронтенда
Не трогатьОставить поведение WordPress по умолчаниюКогда редакторы активно используют автоподстановку

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

Как проверить, что всё сработало

После правки не ограничивайтесь визуальной проверкой страницы. Смотрите на исходник и сетевые запросы.

  • Откройте страницу в режиме инкогнито.
  • Посмотрите исходный код и убедитесь, что wp-emoji-release.min.js больше не подключается.
  • Проверьте, исчез ли wp-embed.min.js, если вы его отключали.
  • В DevTools > Network обновите страницу и сравните количество запросов до и после.
  • В редакторе вставьте ссылку на внешний ресурс и проверьте, как ведёт себя блок: автоподстановка должна исчезнуть, если вы отключали autoembed.

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

Частые ошибки и как их исправить

Код вставили в активную тему, а потом сменили дизайн

Это классическая проблема. После смены темы оптимизация пропадает, и кажется, что WordPress «сам всё вернул». Для таких правок лучше использовать mu-plugin или дочернюю тему.

Отключили oEmbed, но редакторы потеряли привычный сценарий

Если контент-менеджеры вставляли ссылки на видео и ожидали превью, им нужно дать понятную альтернативу: либо iframe-код, либо отдельный блок/плагин для вставки медиа. Иначе они будут считать, что сайт «сломался».

Проверяли не очищенный кэш

После правки сбросьте серверный кэш, кэш плагина и браузерный кэш. Иначе вы будете смотреть на старую версию страницы и искать несуществующую ошибку в коде.

Удалили слишком много фильтров

Иногда пытаются «почистить всё» и случайно ломают embed в виджетах или RSS-вывод. Не убирайте лишнее, если не понимаете, где это используется. Сначала отключайте только фронтенд-скрипты, затем уже проверяйте поведение контента.

Практические советы по безопасности и производительности

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

  • не редактируйте functions.php основной темы без бэкапа;
  • если правка нужна надолго, вынесите её в mu-plugin;
  • после обновлений темы и плагинов повторно проверьте исходный код страницы;
  • не отключайте oEmbed, если редакторы регулярно вставляют внешние ссылки без ручного iframe;
  • если задача шире и вы чистите сайт комплексно, объединяйте такие правки с другими техническими настройками, а не держите десяток разрозненных сниппетов.

Для проектов, где важна аккуратная техническая настройка без лишних ручных правок, удобнее держать такие переключатели в одном месте. Но даже тогда полезно понимать, какой именно код убирает emoji, а какой — oEmbed. Это помогает быстро диагностировать конфликт, если после обновления что-то ведёт себя не так.

⭐⭐⭐⭐⭐