Если в отчёте по производительности вы видите лишние запросы к wp-embed.min.js или хотите убрать автоподстановку встраиваний из чужих URL, отключение embed в WordPress — нормальная техническая задача. Но делать это нужно аккуратно: oEmbed используется не только для красивых превью, но и для встроенного контента в редакторе, комментариях и на сторонних страницах.
Ниже — рабочий сценарий: как понять, что именно мешает, как отключить embed без лишнего риска и как проверить, что сайт после правки не потерял нужные встраивания.
Когда отключение embed действительно оправдано
Сначала стоит убедиться, что проблема не в другом скрипте. embed имеет смысл отключать, если:
- на фронтенде грузится
wp-embed.min.js, но встраивания WordPress не используются; - вы не хотите, чтобы ваши записи автоматически подхватывались как embed на других сайтах;
- нужно сократить число запросов и убрать лишний JS на страницах с высокой нагрузкой;
- редактор и контент не завязаны на oEmbed-предпросмотры.
Если же на сайте есть вставки из YouTube, VK, RuTube или других сервисов, это не всегда связано с wp-embed. Внешние встраивания обычно работают через отдельные блоки, iframe или плагины, и отключение WordPress embed их не трогает.
Диагностика: что именно грузится и откуда
Перед изменениями откройте страницу в браузере и посмотрите исходный код или вкладку Network. Ищите:
/wp-includes/js/wp-embed.min.js;- ссылку на
wp-embedв списке подключённых скриптов; - мета-эндпоинт oEmbed в
<link rel="alternate" type="application/json+oembed" ...>; - автоподстановку URL в редакторе, если вы вставляете ссылку на запись WordPress и она превращается в карточку.
Если задача только в том, чтобы убрать фронтенд-скрипт, достаточно снять его подключение. Если нужно ещё и отключить сам механизм oEmbed, придётся убрать фильтры и REST-эндпоинты, которые WordPress использует для обмена embed-данными.
Пошаговое решение без плагинов
Самый предсказуемый вариант — добавить код в дочернюю тему или в небольшой mu-plugin. Так проще контролировать изменения и не зависеть от обновлений темы.
1. Отключить скрипт wp-embed
Этот шаг убирает фронтенд-скрипт, который отвечает за поведение embed на сайте.
add_action( 'wp_enqueue_scripts', function () {
wp_deregister_script( 'wp-embed' );
}, 100 );Если тема или плагин подключают скрипт поздно, приоритет 100 помогает снять его после стандартной очереди. Обычно этого достаточно, чтобы wp-embed.min.js исчез из HTML.
2. Отключить oEmbed-обнаружение в WordPress
Если нужно убрать сам механизм автоподстановки, добавьте фильтры ниже. Они отключают discovery, REST-эндпоинты и связанные ссылки в head.
add_action( 'init', function () {
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'embed_oembed_discover', '__return_false' );
add_filter( 'oembed_response_data', '__return_false' );
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( isset( $endpoints['/oembed/1.0/embed'] ) ) {
unset( $endpoints['/oembed/1.0/embed'] );
}
if ( isset( $endpoints['/oembed/1.0/proxy'] ) ) {
unset( $endpoints['/oembed/1.0/proxy'] );
}
return $endpoints;
} );
} );Этот вариант уже жёстче. Он подходит, когда embed на сайте не нужен вообще, а не только как фронтенд-скрипт.
3. Если нужен только фронтенд-эффект, не трогайте REST
Иногда достаточно убрать только wp-embed и discovery-ссылки в <head>. Это мягче: редактор и системные механизмы WordPress остаются доступными, а лишний скрипт исчезает.
Сравнение подходов
| Подход | Что убирает | Риск | Когда выбирать |
|---|---|---|---|
Снять wp-embed | Фронтенд-скрипт | Низкий | Нужна только разгрузка страницы |
| Отключить discovery и REST | Механизм oEmbed целиком | Средний | Embed на сайте не используется вообще |
| Плагин оптимизации | Зависит от настроек | Зависит от плагина | Нужно управлять несколькими оптимизациями из админки |
Если у вас уже стоит плагин оптимизации вроде Clearfy Pro, проверьте, не дублирует ли он эту настройку. Иногда код и плагин одновременно пытаются отключить один и тот же скрипт, и потом сложно понять, что именно сработало.
Проверка результата после внедрения
После правки проверьте не только HTML, но и поведение сайта:
- откройте исходный код страницы и убедитесь, что
wp-embed.min.jsбольше не подключается; - проверьте вкладку Network: запрос к
wp-embed.min.jsдолжен исчезнуть; - вставьте ссылку на запись WordPress в редакторе и посмотрите, нужна ли вам автоподстановка;
- если отключали REST-эндпоинты, проверьте, не завязаны ли на них сторонние интеграции.
Для быстрой проверки можно выполнить в консоли браузера:
document.querySelectorAll('script[src*="wp-embed"]').lengthЕсли результат 0, скрипт на странице не подключён. Но это ещё не гарантирует, что oEmbed полностью отключён: discovery-ссылки и REST могут оставаться, если вы убрали только один слой.
Частые ошибки и как их исправить
Сняли только wp-embed, но embed всё равно работает
Это нормальная ситуация. Скрипт отвечает за поведение на фронтенде, но не отключает сам механизм oEmbed. Если нужен полный запрет, добавляйте фильтры и удаляйте discovery-ссылки.
Сломались встраивания в редакторе
Чаще всего это происходит, когда отключили слишком много сразу: discovery, REST и host JS. Если редактору нужны предпросмотры ссылок, оставьте мягкий вариант и уберите только фронтенд-скрипт.
Код добавили в functions.php родительской темы
После обновления темы правка может исчезнуть. Для таких изменений безопаснее использовать дочернюю тему или mu-plugin.
Плагин оптимизации и кастомный код делают одно и то же
В результате сложно отлаживать, что именно отключает embed. Оставьте один источник правды: либо код, либо настройку плагина.
Чек-лист перед публикацией изменений
- Проверили, используется ли embed на сайте вообще.
- Сняли только тот уровень, который действительно нужен.
- Посмотрели исходный код и Network после очистки кэша.
- Проверили редактор и вставки ссылок на внутренние записи.
- Убедились, что изменения лежат в дочерней теме или mu-plugin.
Безопасность и производительность
Отключение embed не даёт магического прироста скорости, но убирает лишний скрипт и часть служебной логики. На небольшом сайте это может быть незаметно, а на проекте с жёсткими требованиями к фронтенду — вполне оправдано.
Если вы работаете с кастомной темой, лучше не править ядро и не удалять файлы WordPress вручную. Поддерживаемый способ — фильтры и wp_deregister_script(). Так обновления не сломают сайт, а откат займёт пару минут.
Когда нужна более широкая чистка технического мусора — отключение дублей, лишних мета-тегов и части служебных подключений — удобнее собрать это в одном месте, например через Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае полезно понимать, какой именно код вы выключаете и зачем.
Если после отключения embed на сайте появились странности в карточках ссылок или редакторе, вернитесь к мягкому варианту: сначала уберите только wp-embed, а уже потом решайте, нужен ли полный запрет oEmbed.