oEmbed в WordPress часто оставляют включённым по умолчанию, а потом удивляются лишним запросам, подключенным скриптам и тому, что в админке и на фронте грузится больше, чем нужно. Если сайт не использует автоподстановку превью из YouTube, X, WordPress.com и других источников, этот механизм можно отключить точечно, без вмешательства в обычные вставки HTML, iframe и блоки редактора.
Ниже разберём, что именно отключать, как проверить, что это не сломало контент, и где чаще всего ошибаются.
Когда oEmbed действительно мешает
Проблема обычно проявляется не как явная ошибка, а как набор мелких симптомов: лишние HTTP-запросы к wp-embed.min.js, дополнительные стили и скрипты на страницах, автоподтягивание внешних превью там, где оно не нужно, и лишняя нагрузка на фронт. На небольшом сайте это может быть незаметно, но в проектах с жёстким контролем производительности и CSP такие вещи лучше убирать осознанно.
Если у вас есть редакторы, которые вставляют ссылки на видео или посты и рассчитывают на красивое превью, отключать oEmbed целиком не стоит. В таком случае лучше убрать только лишние части, а не ломать весь механизм.
Что именно делает oEmbed
WordPress использует oEmbed для двух задач: автоматически превращает некоторые URL в встроенный контент и подгружает поддержку встраивания через отдельный скрипт. Для большинства обычных ссылок это не критично, но если сайт работает как статичный корпоративный ресурс, блог с ручной версткой или проект с ограниченным набором внешних интеграций, oEmbed часто оказывается лишним.
Диагностика: что отключать, а что оставить
Сначала проверьте, используется ли автоподстановка в реальных материалах. Откройте несколько записей и страниц, где редакторы вставляли ссылки на видео, посты или карты. Если там стоят обычные iframe-блоки или вручную вставленный HTML, oEmbed вам, скорее всего, не нужен.
Дальше посмотрите исходный код страницы и найдите подключение wp-embed.min.js. Если скрипт есть, но никакой функциональной пользы от него нет, его можно убрать. Ещё один признак — в админке или на фронте есть запросы к endpoint'ам oEmbed, хотя сайт не использует автоподстановку.
- проверьте, есть ли в контенте ссылки, которые WordPress превращает в embed;
- посмотрите исходный код на наличие
wp-embed.min.js; - сравните список подключенных скриптов до и после изменений;
- убедитесь, что редакторы не зависят от автоподстановки внешних ссылок.
Как отключить oEmbed кодом
Самый предсказуемый вариант — убрать автоподстановку и скрипт через functions.php дочерней темы или через небольшой mu-plugin. Так вы не зависите от настроек темы и не теряете контроль после обновлений.
<?php
// Отключаем oEmbed-скрипт на фронте.
add_action( 'wp_enqueue_scripts', function () {
wp_deregister_script( 'wp-embed' );
}, 100 );
// Убираем oEmbed discovery links из <head>.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
// Отключаем автоконвертацию URL в embed.
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'widget_text_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'widget_block_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
Этот вариант подходит, если вы хотите убрать именно автоматическую магию WordPress, но оставить обычные iframe и ручные вставки. На практике этого достаточно для большинства сайтов, где embed-контент вставляют вручную или вообще не используют.
Если нужен более мягкий вариант
Иногда достаточно убрать только скрипт wp-embed, а автоподстановку оставить. Это полезно, если редакторы вставляют ссылки на поддерживаемые сервисы и рассчитывают на preview, но вы хотите сократить фронтовую нагрузку. Однако такой компромисс стоит тестировать отдельно: в некоторых темах и конструкторах поведение может отличаться.
| Подход | Что убирает | Компромисс |
|---|---|---|
| Плагин оптимизации | Часто скрывает oEmbed вместе с другими настройками | Удобно, но меньше контроля |
| Код в теме / mu-plugin | Только нужные части | Нужно следить за обновлениями и тестами |
| Ничего не делать | Ничего | Лишние скрипты и автоподстановка остаются |
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой страницы. Откройте исходный код и убедитесь, что wp-embed.min.js больше не подключается. Затем проверьте несколько материалов с внешними ссылками: обычные ссылки должны остаться ссылками, а ручные iframe — продолжить работать.
Если у вас есть доступ к инструментам разработчика, посмотрите вкладку Network и обновите страницу. Запросов к oEmbed endpoint'ам быть не должно, если вы отключили автоподстановку полностью. Для дополнительной проверки можно сравнить HTML до и после через просмотр исходника или через сохранённую копию страницы.
- скрипт
wp-embed.min.jsотсутствует в исходнике; - страницы открываются без ошибок в консоли;
- ручные iframe и блоки вставки работают как раньше;
- обычные ссылки не превращаются в embed-карточки.
Частые ошибки и как их исправить
Отключили не там, где нужно
Частая ошибка — править functions.php родительской темы. После обновления изменения исчезнут. Для кода такого уровня лучше использовать дочернюю тему или mu-plugin.
Сломали вставки в старых записях
Если в архиве есть материалы, где редакторы рассчитывали на автоподстановку, полное отключение oEmbed может изменить внешний вид страниц. В таком случае сначала найдите такие записи и переведите их на ручные iframe или блоки встраивания.
Удалили слишком много фильтров
Иногда пытаются «почистить» WordPress агрессивно и удаляют всё подряд, включая полезные механизмы. Не стоит отключать то, что вы не проверили на конкретном сайте. Если сомневаетесь, начните со скрипта и discovery links, а автоконвертацию убирайте только после теста.
Не проверили редактор и виджеты
На старых сайтах embed-контент может жить не только в записях, но и в текстовых виджетах, блоках шаблона или пользовательских полях. После отключения проверьте все места, где редакторы могли вставлять внешние ссылки.
Безопасность и производительность
С точки зрения безопасности отключение oEmbed само по себе не делает сайт «защищённее», но уменьшает поверхность лишних внешних интеграций и упрощает контроль над тем, что реально загружается на странице. С точки зрения производительности эффект обычно небольшой, но на страницах с жёстким бюджетом по скриптам даже один лишний файл может быть лишним.
Если вы уже используете плагин для технической чистки сайта, проверьте, нет ли в нём отдельной опции для oEmbed. Например, в Clearfy Pro такие вещи часто удобнее собирать в одном месте, чем размазывать по теме и нескольким сниппетам. Но если нужен точечный контроль, код остаётся самым прозрачным вариантом.
Что делать, если после отключения что-то сломалось
Сначала верните изменения и проверьте, какой именно элемент перестал работать: автоподстановка, iframe, блок вставки или скрипт темы. Затем отключайте по одному фрагменту, а не весь набор сразу. Такой подход быстрее, чем пытаться угадать, какой фильтр оказался лишним.
Если сайт активно редактируется несколькими людьми, зафиксируйте решение в короткой внутренней заметке: что отключено, где лежит код и какие типы вставок теперь разрешены. Это экономит время при следующем обновлении темы или миграции на новый шаблон.