В WordPress по умолчанию при вставке URL с поддержкой oEmbed, например, видео с YouTube или записи из Twitter, автоматически генерируется встроенный (embed) код, который выводит контент в виде плеера или виджета. В большинстве случаев это удобно, но бывают ситуации, когда нужно отключить эту функцию и удалить embed код, чтобы избежать лишних скриптов, ускорить загрузку сайта или сохранить строгий контроль над выводом контента.
Что такое embed код в WordPress и зачем его отключать?
Embed код — это HTML и JavaScript, который WordPress автоматически добавляет при вставке ссылки. Например, если вы вставите в редактор ссылку на видео с YouTube, WordPress заменит её на iframe с плеером. Это удобно, но если вы хотите, например, отображать только ссылку без плеера или вставлять свой собственный код, нужно отключить эту функцию.
Причины отключения embed могут быть следующими:
- Ускорение загрузки страниц за счёт уменьшения количества сторонних скриптов.
- Избежание конфликтов с другими плагинами или темами.
- Повышение безопасности — меньшее количество внешних вызовов.
- Контроль над выводом контента — вставка только необходимого HTML.
Как WordPress реализует oEmbed и где происходит вставка кода
WordPress использует встроенный класс WP_oEmbed и фильтры для обработки ссылок. При рендеринге контента с URL, который поддерживает oEmbed, происходит автоматическая замена ссылки на embed код через фильтр the_content. Кроме того, в REST API и редакторе Gutenberg тоже есть поддержка oEmbed.
Для управления этим процессом достаточно отключить соответствующие фильтры и возможности, чтобы ссылки выводились в тексте как обычный URL, без замены.
Отключение Embed кода через functions.php: пошаговый пример
В файле functions.php вашей активной темы (или лучше дочерней темы) добавьте следующий код, который полностью отключит автоматическую замену ссылок на embed код:
function wpskills_disable_embed_code() {
// Отключаем oEmbed REST API endpoint
remove_action('rest_api_init', 'wp_oembed_register_route');
// Отключаем oEmbed discovery links в заголовке страницы
remove_action('wp_head', 'wp_oembed_add_discovery_links');
// Отключаем oEmbed-specific JavaScript
remove_action('wp_head', 'wp_oembed_add_host_js');
// Убираем фильтры, которые заменяют URL на embed код в контенте и комментариях
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
remove_filter('comment_text', array($GLOBALS['wp_embed'], 'autoembed'), 8);
}
add_action('init', 'wpskills_disable_embed_code');Этот код отключит все основные механизмы вставки embed кода, включая REST API, скрипты и фильтры замены ссылок.
Объяснение кода:
remove_action('rest_api_init', 'wp_oembed_register_route')— отключает endpoint REST API для oEmbed.remove_action('wp_head', 'wp_oembed_add_discovery_links')— удаляет мета-теги в шапке сайта, связанные с oEmbed.remove_action('wp_head', 'wp_oembed_add_host_js')— не подключает скрипты для oEmbed.remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8)— отключает автоматическую замену ссылок на embed код в содержимом постов.remove_filter('comment_text', array($GLOBALS['wp_embed'], 'autoembed'), 8)— отключает такую же замену в комментариях.
Как сохранить возможность вставлять вручную iframe или другой embed код
Важно: приведённый метод отключает только автоматическую вставку embed кода по ссылке. Если вы хотите вставлять iframe или другой embed код вручную через визуальный или текстовый редактор — это останется доступным.
Вы можете использовать стандартный HTML блок в Gutenberg или переключиться в текстовый режим Classic Editor и вставить нужный iframe:
<iframe width="560" height="315" src="https://www.youtube.com/embed/VIDEO_ID" frameborder="0" allowfullscreen></iframe>Таким образом, вы получаете полный контроль над выводом мультимедийного контента без автоматических вставок WordPress.
Альтернативный способ: отключение embed через плагин Clearfy
Если вы используете плагин Clearfy Pro, он предоставляет удобный интерфейс для отключения oEmbed функций без редактирования кода. В Clearfy достаточно перейти в настройки оптимизации и отключить «oEmbed и автоматическую вставку embed».
Это хорошее решение для тех, кто предпочитает не трогать код и хочет гибко управлять функционалом сайта через админку.
Дополнительные советы по работе с embed кодом в WordPress
Если вам нужно selectively отключать embed код только на некоторых типах страниц или постов, можно модифицировать функцию следующим образом:
function wpskills_conditional_disable_embed() {
if (is_single() || is_page()) { // Например, отключаем только на одиночных страницах и постах
remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8);
}
}
add_action('wp', 'wpskills_conditional_disable_embed');Также если у вас используется тема Reboot или Root от WPSHOP, убедитесь, что в ней нет собственных функций или хуков, которые могут повторно добавлять embed код. В таком случае применяйте аналогичные методы удаления фильтров.
Заключение
Отключение автоматического embed кода в WordPress без плагинов — это простой и эффективный способ оптимизировать сайт, повысить безопасность и контролировать вывод контента. Используйте приведённые функции в functions.php для полной деактивации oEmbed, при необходимости комбинируйте с ручной вставкой iframe или плагинами типа Clearfy для удобства.