Если в редакторе WordPress вставка ссылки на YouTube, X, Instagram или другой поддерживаемый сервис автоматически превращается в встроенный блок, это удобно не всегда. На небольших сайтах такая автоподстановка часто добавляет лишние запросы, усложняет контроль над разметкой и иногда ломает верстку в старых темах или кастомных шаблонах.
Задача здесь не в том, чтобы «убрать все embeds вообще», а в том, чтобы отключить именно WordPress oEmbed-механику там, где она не нужна: автопреобразование URL в iframe, загрузку связанных скриптов и лишние REST-эндпоинты для предпросмотра встраиваний.
Когда это действительно нужно
Чаще всего проблема всплывает в трех сценариях: редакторы вставляют обычные ссылки, а на фронтенде появляются тяжелые iframe; в шаблоне статьи ломается сетка из-за встроенного видео; на сайте с минималистичной темой хочется оставить только обычные ссылки без автоподстановки.
Еще один практический кейс — техническая оптимизация. Если вы не используете встроенные превью из внешних сервисов, oEmbed просто создает лишнюю нагрузку без пользы. Это не критичная нагрузка, но на контентных сайтах с большим числом страниц такие мелочи накапливаются.
Диагностика: что именно включает WordPress
Сначала проверьте, что проблема именно в oEmbed, а не в плагине или блоке темы. В классическом редакторе и в Gutenberg WordPress может автоматически подменять URL на embed-предпросмотр. На фронтенде при этом подключается скрипт wp-embed.min.js, а в HTML появляются iframe или обертки под встраивание.
Признаки, что oEmbed активен
- обычная ссылка на видео или пост превращается в встроенный блок;
- в исходном коде страницы есть
wp-embed.min.js; - в редакторе URL отображается как embed-превью, а не как текстовая ссылка;
- в шаблоне появляются лишние внешние запросы к сервисам, которые вы не планировали использовать.
Если embed добавляет не WordPress, а сам плагин или блок темы, отключение oEmbed не поможет. В таком случае нужно искать источник в настройках конкретного плагина, блоков или в шаблоне.
Как отключить автоподстановку встраиваний через код
Самый надежный способ — убрать oEmbed на уровне темы или мини-плагина. Это лучше, чем править ядро или надеяться на случайные настройки в админке.
<?php
add_action('init', function () {
// Убираем автопреобразование ссылок в embed.
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
remove_filter('widget_text_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
remove_filter('widget_block_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
});
add_action('wp_enqueue_scripts', function () {
// Убираем фронтенд-скрипт oEmbed, если он больше не нужен.
wp_dequeue_script('wp-embed');
wp_deregister_script('wp-embed');
}, 100);
Этот вариант отключает именно автоподстановку и связанный скрипт на фронтенде. Если вы используете embed-карточки осознанно, не применяйте этот код без теста на копии сайта.
Если нужно отключить только автоподстановку, но оставить ручные embed-блоки
Иногда достаточно убрать автоматическое преобразование URL, но оставить возможность вставлять embed вручную через блок «Встраивание». Тогда не трогайте все связанные механизмы, а отключайте только фильтр автоподстановки.
<?php
add_action('init', function () {
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
});
Это более мягкий вариант. Он полезен, если редакторы иногда вставляют видео вручную, но вы не хотите, чтобы любая ссылка на поддерживаемый сервис превращалась в iframe сама по себе.
Сравнение подходов: код, плагин, компромисс
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
| Код в теме или mu-plugin | Отключает autoembed и скрипт wp-embed | Точно, прозрачно, без лишнего интерфейса | Нужно тестировать на совместимость |
| Плагин оптимизации | Может убирать embed и другие лишние функции | Удобно для неразработчика | Часто отключает больше, чем нужно |
| Ничего не менять | Оставить поведение по умолчанию | Нет риска сломать embed | Лишние скрипты и автозамены остаются |
Если нужен более широкий контроль над чисткой WordPress, обычно удобнее собрать это в одном месте через плагин оптимизации вроде Clearfy Pro, но только если вы действительно используете его и понимаете, какие опции включаете. Для точечной задачи код чаще надежнее.
Пошаговое решение без лишних рисков
- Сделайте резервную копию файлов и базы.
- Проверьте, где именно используется embed: записи, виджеты, шаблоны, блоки.
- Добавьте код в дочернюю тему или в отдельный mu-plugin.
- Очистите кеш страницы и, если есть, кеш CDN.
- Откройте несколько страниц с обычными ссылками и убедитесь, что они больше не превращаются во встроенные блоки.
Если у вас уже есть мини-плагин для технических правок, лучше добавить код туда. Так он не исчезнет при смене темы.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Откройте страницу с ссылкой на поддерживаемый сервис и убедитесь, что она отображается как обычная ссылка, а не как iframe или карточка предпросмотра. Затем проверьте исходный код страницы: скрипт wp-embed.min.js не должен загружаться, если вы его отключили.
Дополнительно проверьте редактор. Если вы вставляете URL в новый абзац, WordPress не должен автоматически подменять его на embed-блок. Если подмена осталась, значит фильтр отключен не там, где нужно, или его снова подключает плагин.
Частые ошибки и как их исправить
- Код добавили в файл темы, а потом обновили тему. Решение: перенесите правку в дочернюю тему или mu-plugin.
- Отключили wp-embed, но iframe остались. Значит embed вставляет не WordPress, а блок, плагин или вручную добавленный HTML.
- Сломались старые записи с видео. Проверьте, не использовали ли вы автоподстановку как единственный способ вставки контента. Для таких записей лучше оставить ручные embed-блоки или заменить их на обычные ссылки.
- После правки ничего не изменилось. Очистите кеш плагина, сервера и CDN, затем проверьте страницу в приватном окне.
Что учесть по безопасности и производительности
Отключение oEmbed само по себе не делает сайт безопаснее, но уменьшает количество внешних зависимостей и неожиданных вставок. Это полезно, если редакторы часто копируют ссылки из разных источников и не всегда понимают, как WordPress их интерпретирует.
Если вы хотите оставить embed только для части контента, лучше заранее описать редакторам правило: обычные ссылки — для текста, embed-блок — только когда нужен именно встроенный медиаконтент. Так проще избежать случайных поломок верстки и лишних запросов.
Если задача шире и вы регулярно чистите WordPress от лишних функций, имеет смысл собрать такие настройки в один технический слой: отключение oEmbed, emoji, лишних REST-эндпоинтов, неиспользуемых скриптов. Но каждую опцию нужно проверять отдельно, а не включать все подряд.