oEmbed в WordPress удобен, пока сайт не начинает тянуть лишние скрипты, делать дополнительные запросы и автоматически превращать вставленные URL в встраиваемые блоки. На небольшом сайте это незаметно, но на проекте с большим количеством записей, старым контентом или строгими требованиями к производительности такие мелочи быстро складываются в лишнюю нагрузку.
Если задача простая — убрать автоподстановку в редакторе и не грузить фронтенд лишними ресурсами — это можно сделать без тяжелых плагинов. Ниже разберём, что именно отключать, как не сломать нужные встраивания и как проверить результат.
Когда oEmbed действительно мешает
Проблема обычно проявляется не как одна большая ошибка, а как набор мелких симптомов. На странице появляются лишние запросы к wp-embed.min.js, в HTML остаются скрипты, которые вам не нужны, а в редакторе URL из YouTube, X/Twitter или других сервисов автоматически превращаются в embed-блоки. Для контентных сайтов это иногда полезно, но для технических страниц, документации и лендингов — лишнее поведение.
Типичные признаки
- в исходном коде страниц есть подключение
wp-embed.min.js; - вставленный обычный URL превращается в встроенный объект без явного намерения;
- на страницах с минималистичной версткой появляются сторонние iframe и дополнительные запросы;
- после миграции или чистки контента остаются старые embed-коды, которые уже не нужны.
Диагностика: что именно отключать
В WordPress oEmbed состоит из нескольких частей. Чаще всего путают отключение автоподстановки в редакторе и отключение фронтенд-скрипта. Это разные вещи. Если убрать только один слой, эффект будет неполным: редактор продолжит преобразовывать ссылки, а фронтенд всё равно может грузить ненужный JavaScript.
Перед правками проверьте:
- используются ли на сайте реальные embed-блоки, которые нужно сохранить;
- есть ли в контенте старые вставки через URL, а не через блоки;
- подключается ли
wp-embed.min.jsна всех страницах или только на части шаблонов; - не завязаны ли на встраивания отдельные элементы темы или плагинов.
Пошаговое решение без лишних плагинов
Если вам нужно отключить именно автоподстановку URL в embed и убрать фронтенд-скрипт, проще всего сделать это кодом в дочерней теме или через собственный мини-плагин. Так вы контролируете поведение и не зависите от интерфейса стороннего плагина.
1. Отключаем автоподстановку oEmbed
Этот фильтр убирает превращение обычных URL в embed-объекты в контенте. Он не удаляет уже вставленные iframe вручную, а только отключает автоматическую обработку.
add_filter( 'embed_oembed_discover', '__return_false' );Если у вас есть старые записи, где URL уже был преобразован в embed, этот фильтр не перепишет контент задним числом. Он влияет на новые вставки и на обработку при выводе.
2. Убираем подключение wp-embed.js
Чтобы не грузить лишний скрипт на фронтенде, его можно снять через wp_deregister_script(). Делать это лучше на wp_enqueue_scripts, когда WordPress уже зарегистрировал свои скрипты.
add_action( 'wp_enqueue_scripts', function () {
wp_deregister_script( 'wp-embed' );
}, 100 );Если тема или плагин явно рассчитывают на этот скрипт, после отключения часть встроенного контента может вести себя иначе. Поэтому сначала проверьте реальные страницы с embed-элементами.
3. Если нужен более мягкий вариант
Иногда не стоит отключать всё сразу. Например, на блоге есть несколько записей с YouTube-вставками, а на остальных страницах embed не нужен. В таком случае можно отключать скрипт только на части шаблонов.
add_action( 'wp_enqueue_scripts', function () {
if ( ! is_single() ) {
wp_deregister_script( 'wp-embed' );
}
}, 100 );Это компромиссный вариант: на одиночных записях скрипт остаётся, на страницах и архивах — нет. Но если embed не используется вообще, проще убрать его везде.
Что выбрать: плагин, код или частичное отключение
| Подход | Когда подходит | Минус |
|---|---|---|
| Код в теме или мини-плагине | Нужно точечно отключить oEmbed и контролировать поведение | Требует аккуратности при обновлениях темы |
| Плагин для оптимизации | Нужно управлять несколькими настройками без правки кода | Лишняя зависимость и риск конфликтов |
| Частичное отключение по шаблонам | Embed нужен только на отдельных типах страниц | Сложнее поддерживать логику исключений |
Если у вас уже стоит плагин для технической чистки сайта, проверьте, не умеет ли он отключать embed-скрипт и автоподстановку без ручного кода. Например, в Clearfy Pro есть набор функций для чистки WordPress, и в таких задачах это иногда удобнее, чем держать отдельный сниппет. Но если нужен только один конкретный эффект, код обычно прозрачнее и предсказуемее.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что WordPress действительно перестал грузить лишнее и не ломает нужные вставки.
Что проверить вручную
- откройте страницу и посмотрите исходный код: нет ли
wp-embed.min.js; - вставьте в черновик обычный URL и убедитесь, что он не превращается в embed автоматически;
- проверьте записи, где embed нужен: YouTube, карты, соцсети, если они используются;
- сравните поведение на мобильной и десктопной версиях, если тема по-разному подключает скрипты.
Что проверить через инструменты браузера
В DevTools откройте вкладку Network и обновите страницу. Если отключение сработало, запрос к wp-embed.min.js исчезнет. Если он всё ещё есть, значит скрипт подключает тема или плагин, а не только ядро WordPress.
Полезно также посмотреть HTML-ответ страницы и найти все упоминания embed. Иногда скрипт убран, но в контенте остались старые iframe, которые продолжают грузить внешние ресурсы.
Частые ошибки и как их исправить
Сняли только скрипт, но не отключили автоподстановку
В итоге фронтенд стал легче, но редактор продолжает превращать ссылки в embed. Исправление простое: добавьте фильтр embed_oembed_discover и проверьте новые записи отдельно.
Отключили всё наугад и сломали нужные встраивания
Если на сайте реально используются embed-блоки, полное отключение может убрать часть функциональности. В таком случае оставьте embed только там, где он нужен, или перенесите встраивания на явные блоки и iframe.
Правили functions.php в родительской теме
После обновления темы изменения исчезнут. Для постоянного решения используйте дочернюю тему или небольшой собственный плагин. Это особенно важно, если сайт обслуживается несколькими людьми и код нужно быстро найти.
Проверяли только главную страницу
oEmbed может вести себя по-разному на записях, страницах и архивах. Проверяйте хотя бы один шаблон записи, одну страницу и один архив, если на них есть контент с внешними ссылками.
Безопасность и производительность: что учесть заранее
Отключение oEmbed само по себе не делает сайт безопаснее, но уменьшает поверхность лишних внешних зависимостей. Это полезно, если вы стремитесь к более предсказуемому HTML и хотите сократить количество сторонних запросов. Но не стоит отключать embed только ради абстрактной «оптимизации» без проверки реального контента.
Если на сайте много старых материалов, сначала сделайте резервную копию и проверьте несколько записей вручную. Для проектов с высокой нагрузкой лучше тестировать изменения на staging-копии: там сразу видно, не сломались ли встраивания и не остались ли лишние подключения.
Если вам нужно не только отключить oEmbed, но и почистить сайт от других технических дублей и лишних элементов ядра, удобнее решать это комплексно, а не набором разрозненных сниппетов. Но даже в этом случае полезно понимать, какой именно фильтр или скрипт вы убираете, чтобы не получить побочные эффекты после обновлений.
В практическом сценарии рабочая схема обычно такая: сначала диагностировать, где именно используется embed, затем отключить автоподстановку и лишний скрипт, после этого проверить исходный код и реальные записи. Если всё сделано аккуратно, сайт становится чуть проще и предсказуемее без потери нужного контента.