В WordPress по умолчанию встроена поддержка вставки контента с помощью Embed и возможности добавления iframe в записи и страницы. Это удобно, но иногда приводит к замедлению загрузки сайта из-за подключения внешних ресурсов и скриптов, а также создает потенциальные риски безопасности. В этой статье разберёмся, как грамотно и эффективно отключить Embed и iframe в WordPress, чтобы ускорить сайт и повысить его безопасность, без потери ключевого функционала.
Что такое Embed и iframe в WordPress и почему их отключают
Под Embed понимается механизм, позволяющий автоматически встраивать контент из внешних источников — YouTube видео, Twitter-твиты, посты Instagram и многие другие. WordPress реализует это через oEmbed протокол, который преобразует ссылки в медиа-блоки.
Iframe — это HTML-тег для встраивания другого HTML-документа внутрь страницы. Часто iframe используется для вставки видео, карт, форм и стороннего контента.
Проблемы с Embed и iframe:
- Подключение к сторонним серверам замедляет загрузку страниц.
- Внешние скрипты и стили могут конфликтовать с темой или плагинами, вызывая задержки.
- Увеличивается количество HTTP-запросов и общий размер страницы.
- Снижается безопасность — iframe может содержать уязвимый код.
Отключение или ограничение этих функций позволяет оптимизировать производительность, особенно на слабых хостингах и при большом трафике.
Как отключить oEmbed в WordPress стандартными средствами
WordPress предоставляет фильтры и функции для отключения oEmbed. Ниже пример кода, который можно добавить в functions.php темы или в свой плагин:
function wpspeed_disable_oembed() {
// Отключаем автоматическую вставку oEmbed
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_action('rest_api_init', 'wp_oembed_register_route');
add_filter('embed_oembed_discover', '__return_false');
add_filter('tiny_mce_plugins', 'wpspeed_disable_tinymce_oembed');
add_filter('rewrite_rules_array', 'wpspeed_remove_oembed_rewrites');
}
function wpspeed_disable_tinymce_oembed($plugins) {
return array_diff($plugins, array('wpembed'));
}
function wpspeed_remove_oembed_rewrites($rules) {
foreach($rules as $rule => $rewrite) {
if(strpos($rewrite, 'embed=true') !== false) {
unset($rules[$rule]);
}
}
return $rules;
}
add_action('init', 'wpspeed_disable_oembed');Этот код полностью отключит функционал oEmbed, включая поддержку REST API и TinyMCE. После добавления рекомендуется очистить кэш и проверить работу сайта.
Как ограничить или заблокировать использование iframe в контенте WordPress
В WordPress iframe можно вставлять напрямую в редактор. Чтобы запретить использование iframe, можно применять фильтр wp_kses_allowed_html. Пример кода для удаления тега iframe из разрешённых:
function wpspeed_disable_iframe_in_content($allowed_tags) {
if(isset($allowed_tags['iframe'])) {
unset($allowed_tags['iframe']);
}
return $allowed_tags;
}
add_filter('wp_kses_allowed_html', 'wpspeed_disable_iframe_in_content');Данный код удалит поддержку iframe из разрешённых HTML-тегов, и при сохранении записи iframe будет удалён или экранирован. Это безопасный способ предотвратить внедрение iframe в контент.
Если нужно полностью запретить iframe, включая вставки через редактор Gutenberg, можно дополнительно заблокировать соответствующие блоки с помощью JavaScript в админке.
Пример блокировки iframe-блока в Gutenberg
function wpspeed_disable_gutenberg_iframe_block() {
wp_enqueue_script('wpspeed-disable-iframe', get_template_directory_uri() . '/js/disable-iframe.js', array('wp-blocks', 'wp-dom-ready', 'wp-edit-post'), null, true);
}
add_action('enqueue_block_editor_assets', 'wpspeed_disable_gutenberg_iframe_block');Файл disable-iframe.js должен содержать:
wp.domReady(() => {
wp.blocks.unregisterBlockType('core/html'); // отключить блок HTML, где часто вставляют iframe
// Можно дополнительно заблокировать конкретные блоки или добавить предупреждения
});Плагины для управления Embed и iframe для ускорения WordPress
Если не хочется писать код, есть плагины, которые помогут быстро ограничить oEmbed и iframe:
- Disable Embeds — популярный плагин, отключающий все oEmbed функции и REST API связанные с ними.
- Clearfy Pro (https://wpshop.ru/clearfy-pro?utm_source=wpspeed.ru&utm_medium=article&utm_campaign=kak-otkljuchit-embed-iframe-wordpress-dlja-uskoreniya-sajta) — расширенный набор инструментов для оптимизации, включая отключение oEmbed и iframe.
- WP Content Filter
Использование плагинов удобно для быстрого результата, но если нужна максимальная производительность, лучше использовать кастомный код.
Проверка результатов и отладка после отключения Embed и iframe
После внесения изменений важно проверить работу сайта:
- Откройте страницы с видео и другими вставками — они должны либо не отображаться, либо показывать ссылку без встраивания.
- Проверьте исходный код страницы — теги
iframeдолжны отсутствовать, и не должно быть скриптов oEmbed. - Используйте инструменты типа Google PageSpeed Insights, GTmetrix, чтобы сравнить скорость загрузки до и после оптимизации.
- Проверьте работу REST API — в случае отключения oEmbed запросы к
/wp-json/oembed/должны возвращать ошибку 404.
Если что-то работает некорректно, отключите кэш и плагины оптимизации на время дебага.
Заключение
Отключение и ограничение Embed и iframe — эффективный способ ускорить загрузку WordPress-сайта и повысить безопасность. Правильное применение фильтров и хуков позволяет сделать это без ущерба для удобства. Для простых сайтов достаточно добавить несколько строк кода, для сложных — использовать продвинутые плагины типа Clearfy Pro. В любом случае проверяйте результат и адаптируйте решения под свои задачи.