В 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. Это помогает быстро диагностировать конфликт, если после обновления что-то ведёт себя не так.