На небольших и средних сайтах WordPress oEmbed часто не нужен, но его скрипты и служебные запросы продолжают грузиться в <head>. Это не критичная проблема, но на практике она добавляет лишний код, лишние HTTP-запросы и иногда мешает чистке фронтенда, если вы уже вычищаете тему от всего необязательного.
Если задача простая — убрать oEmbed только там, где он реально не используется, — лучше не трогать глобально весь редактор и не ломать вставку видео в админке. Ниже разберём, что именно отключать, как это сделать безопасно и как проверить результат.
Когда oEmbed действительно мешает
oEmbed нужен WordPress для автоматического преобразования ссылок в встроенные блоки: например, когда вы вставляете ссылку на YouTube, X/Twitter или другой поддерживаемый сервис, редактор может показать превью. На фронтенде WordPress также добавляет служебные подключения, связанные с этим механизмом.
Отключать его имеет смысл, если:
- сайт не использует автоподстановку embed по ссылкам;
- вставки видео и картинок делаются вручную через блоки или iframe;
- вы хотите убрать лишние подключения в
headи уменьшить количество служебного кода; - нужно привести фронтенд к более предсказуемому виду для аудита производительности.
Если редакторы регулярно вставляют ссылки на внешние сервисы и рассчитывают на автопредпросмотр, отключение oEmbed на уровне ядра может ухудшить их работу. В таком случае лучше ограничиться только фронтендом.
Диагностика: что именно загружается
Перед изменениями откройте исходный код страницы и найдите такие элементы:
wp-embed.min.js;<link rel="alternate" type="application/json+oembed" ...>;<link rel="alternate" type="text/xml+oembed" ...>;- запросы к
/wp-json/oembed/1.0/embed.
Если вы видите эти элементы на страницах, где они не нужны, значит есть смысл отключать oEmbed выборочно. Для проверки удобно открыть страницу в браузере, затем посмотреть вкладку Network и отфильтровать запросы по слову oembed или embed.
Как отключить oEmbed безопасно
Самый практичный вариант — убрать фронтенд-скрипт и связанные с ним discovery-теги, но оставить редактор и админку в покое. Для этого можно добавить код в functions.php дочерней темы или в собственный мини-плагин.
Вариант 1: отключить oEmbed на фронтенде
<?php
add_action( 'init', function () {
// Убираем автоподключение embed-скрипта на фронтенде.
wp_deregister_script( 'wp-embed' );
} );
add_action( 'wp_head', function () {
// Удаляем ссылки discovery для oEmbed.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
}, 1 );
Этот вариант обычно достаточно безопасен: он не ломает сам редактор, но убирает лишнее с публичной части сайта. Если тема или плагин отдельно подключают embed-скрипт, его нужно искать уже по факту в исходниках или через поиск по коду.
Вариант 2: отключить oEmbed полностью
Если автоподстановка embed не нужна вообще, можно дополнительно убрать REST-маршрут oEmbed и фильтры, связанные с преобразованием ссылок. Делайте это только если понимаете последствия для редакторов и контент-редакции.
<?php
add_action( 'init', function () {
wp_deregister_script( 'wp-embed' );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
} );
add_filter( 'embed_oembed_discover', '__return_false' );
Здесь важно не переусердствовать. Если на сайте есть старые записи, где редакторы вставляли ссылки и рассчитывали на embed-превью, после отключения они могут отображаться как обычные ссылки. Это не поломка, но изменение поведения, которое нужно учитывать.
Сравнение подходов
| Подход | Что убирает | Риск | Когда выбирать |
|---|---|---|---|
| Плагин для чистки фронтенда | Часть лишних подключений без кода | Зависимость от стороннего решения | Если не хотите править тему руками |
| Код в дочерней теме | Только нужные элементы | Нужно тестировать после обновлений | Если нужен точечный контроль |
| Полное отключение oEmbed | Весь механизм автоподстановки | Может повлиять на редакторов и старый контент | Если embed на сайте не используется вообще |
Если у вас уже стоит плагин для технической чистки сайта, например Clearfy Pro, проверьте, нет ли там отдельного переключателя для oEmbed и embed-скриптов. Это удобнее, чем держать код в теме, если сайт обслуживает не разработчик, а редактор или администратор без доступа к файлам.
Пошаговая настройка без лишнего риска
- Сделайте резервную копию файлов и базы.
- Проверьте, используется ли oEmbed на сайте в старых и новых записях.
- Добавьте код отключения только на тестовой копии сайта.
- Очистите кеш страницы, если используется плагин кеширования или серверный кеш.
- Откройте несколько страниц и убедитесь, что embed-скрипт исчез из исходника.
- Проверьте редактор: вставка ссылок и работа блоков не должны ломаться, если вы отключали только фронтенд.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а технической. Смотрите на три вещи:
- в исходнике страницы больше нет
wp-embed.min.js; - в
<head>исчезли discovery-ссылки oEmbed; - в Network нет запросов к
/wp-json/oembed/1.0/embedпри обычной загрузке страницы.
Если скрипт всё ещё есть, значит его подключает тема, плагин или кешированная версия страницы. В этом случае сначала очистите кеш, затем проверьте, не вставлен ли wp-embed вручную через wp_enqueue_script.
Частые ошибки и как их исправить
Удаляют oEmbed через случайный код из интернета
Типичная ошибка — вставить фрагмент, который отключает слишком много сразу: и embed, и REST API, и фильтры редактора. В итоге ломаются блоки, предпросмотр ссылок или сторонние интеграции. Решение простое: отключайте только то, что реально видите в исходнике страницы.
Проверяют только главную страницу
На главной oEmbed может быть не заметен, а на записи или странице с блоком-ссылкой — уже присутствовать. Проверяйте минимум несколько типов страниц: главную, запись, страницу, архив, если он у вас индексируется и активно используется.
Не чистят кеш после правок
Если включён page cache, старый wp-embed.min.js может продолжать отдаваться даже после удаления кода. Очистите кеш плагина, серверный кеш и, если нужно, CDN.
Отключают embed, не проверив редакторов
Если контент-менеджеры вставляют ссылки на внешние сервисы и ждут автопредпросмотр, они увидят изменение поведения уже после публикации. Лучше заранее предупредить команду или оставить embed в админке, отключив только фронтенд.
Что ещё можно убрать рядом с oEmbed
Если вы уже чистите head, имеет смысл посмотреть и на другие лишние подключения: emoji, REST-запросы, ненужные стили плагинов, старые шрифты. Но не складывайте всё в один большой файл с десятком отключений без комментариев. Через пару месяцев такой код становится трудно сопровождать.
Практичнее держать каждую правку отдельным блоком с коротким комментарием: что отключается, зачем и как проверить, что не сломалось. Это экономит время при обновлении темы и упрощает поиск причины, если что-то перестанет работать после установки нового плагина.