В WordPress emoji-поддержка включена по умолчанию и тянет за собой отдельные скрипты и стили. На небольшом сайте это редко заметно, но на проектах с жёсткой оптимизацией фронтенда лишние запросы и код в <head> обычно только мешают. Если задача — убрать именно технический оверхед, а не запретить пользователям ставить смайлы в контент, это можно сделать безопасно.
Ниже — рабочий сценарий: сначала быстро диагностируем, что именно грузится, потом отключаем emoji через код или плагин, а затем проверяем, что ничего не сломалось в редакторе и в кэше.
Что именно грузит WordPress и почему это мешает
По умолчанию WordPress добавляет поддержку emoji через набор хуков. На фронтенде это обычно выражается в подключении скрипта wp-emoji-release.min.js и связанных inline-обработчиков. На части сайтов это не критично, но если вы уже вычищаете лишние запросы, отключаете эмодзи — нормальный шаг в той же логике, что и удаление неиспользуемых эмбедов или лишних мета-тегов.
Важно понимать: отключение emoji не удаляет символы из контента. Пользователь по-прежнему может вставить Unicode-эмодзи, а браузер отрисует их как обычные символы, если шрифт это поддерживает. Речь только о старом механизме подмены и совместимости.
Диагностика проблемы: как понять, что emoji реально грузятся
Перед изменениями проверьте страницу в браузере и исходный код. Откройте DevTools, вкладку Network, и отфильтруйте по emoji. Если на странице есть запрос к wp-emoji-release.min.js, значит механизм активен. Ещё один быстрый способ — посмотреть HTML-код страницы и найти упоминание emoji или wp-emoji-release.min.js.
Если у вас установлен плагин кэширования, не забудьте очистить кэш перед проверкой. Иначе можно решить, что код не сработал, хотя на самом деле вы смотрите старую версию страницы.
Что проверить до правки
- Открывается ли фронтенд без ошибок в консоли браузера.
- Есть ли в исходнике
wp-emoji-release.min.js. - Не используется ли на сайте кастомный JS, который зависит от старых emoji-обработчиков.
- Есть ли кэш страницы, CDN или серверный кэш, который может скрыть изменения.
Пошаговое решение: отключаем emoji через код
Самый предсказуемый вариант — добавить код в functions.php дочерней темы или в собственный мини-плагин. Для продакшена мини-плагин даже удобнее: он не зависит от смены темы.
Ниже код, который снимает стандартные действия WordPress, связанные с emoji, и не трогает сам контент:
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' );
remove_filter( 'the_content', 'wp_staticize_emoji' );
remove_filter( 'comment_text', 'wp_staticize_emoji' );
} );Этот вариант обычно достаточно безопасен, потому что он отключает только механизм подстановки, а не ломает редактор и не вмешивается в сохранение записей.
Если нужен более аккуратный вариант для мини-плагина
Когда вы не хотите править тему, создайте простой плагин в wp-content/plugins/disable-emoji/disable-emoji.php и активируйте его. Так проще откатить изменения, если на сайте появится зависимость от старого поведения.
<?php
/**
* Plugin Name: Disable Emoji Support
*/
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' );
remove_filter( 'the_content', 'wp_staticize_emoji' );
remove_filter( 'comment_text', 'wp_staticize_emoji' );
} );Если у вас есть доступ к WP-CLI и вы ведёте изменения через репозиторий, такой мини-плагин удобнее, чем разбрасывать код по теме.
Альтернатива через плагин: когда код лучше не трогать
Если на проекте нет нормального процесса деплоя или вы не хотите хранить кастомный код в теме, проще использовать плагин оптимизации, где есть отдельная настройка отключения emoji. Это особенно полезно для сайтов, которыми управляют не разработчики: переключатель в админке проще объяснить и быстрее откатить.
Из практики удобнее, когда отключение emoji идёт вместе с другими техническими чистками: удалением лишних скриптов, мета-тегов и дублей. Если вы уже используете Clearfy Pro, имеет смысл проверить его настройки оптимизации и отключать только то, что реально не нужно. У продукта есть отдельная страница: https://wpshop.ru/plugins/clearfy.
| Подход | Плюсы | Минусы |
|---|---|---|
| Код в теме или мини-плагине | Полный контроль, без лишних зависимостей | Нужно не забыть про обновления и деплой |
| Плагин оптимизации | Быстро включить и откатить, удобно для редакторов | Ещё один плагин в системе |
| Не трогать ничего | Ноль риска для текущей конфигурации | Лишний технический оверхед остаётся |
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Сначала очистите весь кэш: плагин, сервер, CDN, браузер. Затем откройте главную страницу и любую внутреннюю страницу в режиме инкогнито.
Проверка должна быть конкретной:
- в исходном коде страницы больше нет
wp-emoji-release.min.js; - в Network нет запроса на emoji-скрипт;
- в консоли браузера нет новых ошибок после загрузки страницы;
- в админке редактор записей открывается без визуальных артефактов;
- в письмах WordPress не появились странные символы вместо эмодзи, если вы используете их в шаблонах.
Если у вас есть автоматизированная проверка фронтенда, можно добавить простой контроль по HTML. Например, через curl и grep:
curl -s https://example.com/ | grep -i emojiКоманда не идеальна, но для быстрой ручной валидации подходит. Если ничего не выводится, это ещё не абсолютное доказательство, но хороший первый сигнал.
Частые ошибки и как их исправить
Удалили не те хуки и сломали админку
Иногда пытаются отключить emoji слишком агрессивно и заодно задевают другие фильтры. Если после правки в админке появились ошибки, откатите изменения и проверьте, что вы убрали только стандартные emoji-хуки, а не общий вывод скриптов в wp_head.
Проверили без очистки кэша
Это самая частая причина ложного вывода. Страница может продолжать отдавать старый HTML из кэша, и кажется, что код не работает. Сначала очищайте кэш плагина, потом серверный кэш, потом CDN.
Отключили emoji в теме, а потом сменили тему
Если код лежит в functions.php, он исчезнет при смене темы. Для долгоживущего проекта лучше использовать мини-плагин или mu-plugin.
Пытались убрать emoji через обрезку HTML
Некоторые ставят фильтры, которые вырезают emoji из всего HTML. Это плохая идея: можно случайно задеть классы, атрибуты или сторонние скрипты. Надёжнее отключать штатные хуки WordPress, а не чистить код страницы постфактум.
Практические советы по безопасности и производительности
Отключение emoji само по себе не делает сайт быстрее радикально, но это хороший элемент общей технической чистки. Если вы уже оптимизируете фронтенд, держите изменения небольшими и проверяемыми. Не складывайте в один коммит отключение emoji, удаление jQuery Migrate и переписывание шаблонов — потом будет сложно понять, что именно сломало страницу.
Для безопасной работы:
- вносите правки через дочернюю тему, мини-плагин или mu-plugin;
- храните изменения в git, а не только в админке;
- после правки проверяйте не только главную, но и запись, архив, страницу поиска и админку;
- если используете CDN, убедитесь, что он не отдаёт старую версию HTML;
- не отключайте emoji «на всякий случай» на сайтах, где контент активно редактируют через старые интеграции или почтовые шаблоны.
Если нужен более широкий набор технических отключений и чисток, удобнее смотреть на инструменты, где это собрано в одном месте, чем держать десяток разрозненных сниппетов. Но даже в таком случае каждую опцию стоит включать отдельно и проверять по факту, а не по ощущениям.