Для чего нужен wp-embed.min.js в WordPress 4.4?
Вопрос
- Что делает файл
wp-embed.min.js
? Я заметил, что он добавляется в конец футера моей страницы блога. - Как я могу от него избавиться?
Что я узнал
После некоторого поиска в Google я нашел информацию о Встраиваемом контенте в Codex. Почему WordPress по умолчанию считает, что я хочу добавлять видео и прочее на свою страницу?
Окружение
WordPress 4.4

Что это?
Этот функционал отвечает за преобразование ссылок во встраиваемые фреймы.
Например, вы можете вставить ссылку на видео с Youtube в контент редактора, и при просмотре страницы будет автоматически сгенерирован Youtube-плеер.
Подробнее в документации WordPress
Как отключить?
Я смог окончательно отключить это, используя следующий код:
function my_deregister_scripts(){
// Отменяем регистрацию скрипта wp-embed
wp_deregister_script( 'wp-embed' );
}
// Добавляем действие в подвал сайта
add_action( 'wp_footer', 'my_deregister_scripts' );

Добавление на действие "wp_enqueue_scripts" также, кажется, работает.

Да, я бы использовал хук wp_enqueue_scripts
и wp_dequeue_script()
вместо wp_deregister_script()

@swissspidy wp_dequeue_script( 'wp-embed' );
не сработает - можете, пожалуйста, провести тест? Рекомендация по хуку верна.

Использование этого не пройдет проверку themecheck.

Хорошая статья на Kinsta, где используются фильтры для удаления скрипта. https://kinsta.com/knowledgebase/disable-embeds-wordpress/

Я попал в эту ветку с тем же вопросом: что делает файл wp-embed.min.js? Ни один из текущих ответов точно не отвечает на этот вопрос.
Во-первых, я почти уверен, что embed.min.js не относится к встраиванию oEmbed-контента от других провайдеров, таких как Vimeo, YouTube и т.д. Вы можете удалить embed.min.js, и эти встраивания продолжат работать.
Он относится конкретно к встраиванию записей WordPress с других блогов/сайтов. Встраивание записей WordPress внутри записей WordPress — как мета! Эта функция была представлена в WordPress 4.4.
Отключение embed.min.js остановит работу этой функции на вашем сайте.
Вы можете легко это проверить: вставьте URL чужой записи WordPress в одну из своих записей. WordPress должен преобразовать этот URL во встроенный виджет. Когда вы просмотрите свою запись на фронтенде, вы заметите, что ваша разметка содержит blockquote и iframe. Blockquote — это текстовое представление ссылки на встроенную запись блога, а источник iframe — это URL записи блога с добавленным /embed/
: его oEmbed-эндпоинт.
embed.min.js скрывает blockquote и показывает iframe. Он также выполняет некоторые другие манипуляции, чтобы iframe работал корректно.
Теперь попробуйте удалить скрипт embed.min.js со своей страницы, используя один из методов, описанных в других ответах. Перезагрузите страницу, и вы заметите, что blockquote виден, а iframe скрыт.
Короче говоря: если вы хотите встраивать записи других пользователей WordPress в свои собственные записи WordPress, оставьте embed.min.js в покое. Если вам не нужна эта функция, вы можете смело его удалить.

Обратите внимание, что простое удаление embed.js
недостаточно для полного отключения встраивания и может привести к странному поведению, если сделать это неправильно. Для полного отключения этих встроенных элементов используйте официально рекомендуемый плагин Disable Embeds.

Невероятно, как WordPress добавляет бесполезный мусор с каждой новой версией и официальной темой.

Решение Trix не сработало для меня в WordPress 4.4.1
, но я нашел решение в коде плагина Disable Embeds для WordPress. Добавьте этот модифицированный код в файл functions.php
вашей темы, чтобы полностью удалить файл wp-embed.min.js
из фронтенда:
add_action( 'init', function() {
// Удаляем конечную точку REST API.
remove_action('rest_api_init', 'wp_oembed_register_route');
// Отключаем автоопределение oEmbed.
// Не фильтруем результаты oEmbed.
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
// Удаляем ссылки для обнаружения oEmbed.
remove_action('wp_head', 'wp_oembed_add_discovery_links');
// Удаляем специфичный JavaScript для oEmbed из фронтенда и бэкенда.
remove_action('wp_head', 'wp_oembed_add_host_js');
}, PHP_INT_MAX - 1 );

Использование disable_embeds_init()
в качестве имени функции - очень плохая идея. Если вы когда-нибудь установите плагин Disable Embeds, наступит полный хаос. Я рекомендую просто установить плагин, нет никакой выгоды добавлять это в файл functions.php вашей темы. Если вы настаиваете на этом, вам действительно стоит использовать другое имя функции.

Обратите внимание, что это не просто удалит JS из фронтенда/бэкенда, но и полностью отключит возможность встраивания ваших записей на других сайтах, WP Oembed перестанет работать

В статье на Kinsta подробно рассматривается этот метод использования фильтров для его удаления https://kinsta.com/knowledgebase/disable-embeds-wordpress/

Я думаю, эта часть все еще отсутствует.
Что делает файл wp-embed.min.js? Я заметил, что он добавляется в конец подвала моей страницы блога.
Ответ на этот вопрос можно найти в треке: https://core.trac.wordpress.org/changeset/35708
Embeds: Удаление символов & из встроенного JS для встраивания.
Более старые версии WordPress преобразуют символы & в &, что приводит к неработоспособному JS. Если пользователи работают на старых версиях, давайте не будем усложнять им жизнь больше, чем она уже есть.
Также он пытается определить user agent.

Цитируемый вами текст ("Remove & characters from the inline embed JS" и т.д.) является отдельным сообщением коммита для файла, но не описывает общее назначение скрипта. Я предоставил свой собственный ответ, который, надеюсь, проливает больше света на этот вопрос.

Август 2022 - WordPress 6.0.1
Другие уже ответили на сомнения автора.
Я просто хочу подробнее рассказать о wp-embed
Что делает файл wp-embed.min.js?
Коротко: делает ваши ссылки красивыми
Добавляет блок, который отображает контент с других сайтов, таких как Twitter или YouTube.
WordPress Block
Пример
С wp-embed
Без wp-embed
Если отключить wp-embed
в функциях, вот как это будет выглядеть на фронтенде.
Как от него избавиться?
Важно знать, что этот скрипт находится в подвале вашего сайта.
<script type='text/javascript' src='http://ВАШСАЙТ/wp-includes/js/wp-embed.min.js?ver=6.0.1' id='wp-embed-js'></script>
У вас есть два варианта. Первый — использовать wp_enqueue_scripts
, а второй — использовать wp_footer
.
Использование wp_enqueue_scripts
function deregister_style_scripts() {
wp_deregister_script( 'wp-embed' );
}
add_action( 'wp_enqueue_scripts', 'deregister_style_scripts', 100 );
Использование wp_footer
function deregister_style_scripts() {
wp_deregister_script( 'wp-embed' );
}
add_action( 'wp_footer', 'deregister_style_scripts' );
Как вставить ссылку
Используйте блок Embed
Вставка не работает?
Обычно это происходит, когда сайт не разрешает встраивать свой контент на другие сайты. Это контролируется через X-Frame-Options
, есть две директивы: DENY
и SAMEORIGIN
Отказано в соединении
x-frame-options: DENY
Извините, этот контент не может быть встроен.
x-frame-options: SAMEORIGIN
Читать далее
О вставках: https://wordpress.org/support/article/embeds/
x-Frame-Options: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
