Сышышь ты, выходи сюда,
поговорим !

Главная Новости

Как отключить oEmbed в Wordpress (с помощью плагина и без)

Опубликовано: 23.08.2018

видео Как отключить oEmbed в Wordpress (с помощью плагина и без)

Внутренняя перелинковка сайта wordpress Внутренняя перелинковка это

Функция oEmbed в WordPress, о которой сегодня пойдет речь, появилась в версии 4.4 . Она позволяет автоматически встраивать на сайт информацию из внешней веб-страницы по ссылке, указанной в текстовом редакторе . То есть вы, например, размещаете в посте линк на Twitter, Youtube, а система тут же «подхватывает» соответствующее содержимое из этого источника. Все ресурсы, поддерживающие данную фишку, называются oEmbed провайдерами, и с недавних пор Вордпресс также к ним присоединился. Как и в случае с отключением Emoji , логично, что опция пришлась по душе не всем, поэтому сегодня рассмотрим как убрать срабатывание Embed в WordPress.



Плюсы / минусы oEmbed

В принципе, здесь есть свои положительные стороны. Если вы часто делаете какие-то отсылки на другие блоги, то подобные вставки могут быть достаточно удобны, т.к. они кроме самого линка добавляют также иллюстрацию + небольшой анонс. Вот так выглядят разные варианты размещения ссылок:


Дубли wp json oembed в WordPress 4 4

Визуально вторая реализация смотрится гораздо красивее. Плюс вам не нужно тратить время на  вставку ссылки в картинку или в текст.

Если говорить о недостатках, то здесь можно выделить:

Дополнительную нагрузку на сайт, т.к. Embed в Вордпресс внедряет соответствующий скрипт в код страницы и заодно создает лишние HTTP запросы. Иногда опция раздражает, когда нужно просто добавить список обычных линков в черновик статьи (например для последующего редактирования), а они автоматически заменяются. Возможно, вам не хочется чтобы другие веб-проекты автоматически считывали информацию из вашего (пусть даже короткий анонс с картинкой).

По каким бы причинам вы не решились убрать данную фишку, выбирайте один из следующих методов.

Плагин Disable Embeds

Модуль упоминается практически во всех статьях по теме, к тому же у него 10тыс. скачиваний, что тоже свидетельствует о некой популярности. Оценка почти максимальная, обновление было недавно. Настроек здесь нет, Disable Embeds работает сразу после активации.

Основные функции:

отключение возможности встраивания своего контента на других ресурсах; предотвращения автоматического срабатывания oEmbed в WordPress (кроме сайтов из белого списка, правда, о них в описании ничего не сказано); удаление всех JavaScript, связанных с этой фишкой.

Учитывая наличие кэширования в системе, предыдущие «вставки», которые вы добавляли ранее, могут работать. Однако ваши коды на сторонних сайтах — нет.

Есть в сети и другие подходящие WP модули, в том числе комплексные решение по типу Clearfy, Wp-Disable и др., где деактивация oEmbed является лишь одной из множества функций. Если вы используете что-то похожее, то ставить дополнительно Disable Embeds, скорее всего, нет смысла.

Решение задачи без плагинов

На скриншоте-примере выше, как видите, ссылка из WordPressInside не была преобразована. Вероятно, потому что я ранее добавлял некий код при оптимизации WordPress Header блока, хотя встраивание в самом блоге все еще работает.

Дабы полностью избавиться от срабатывания oEmbed, нужно разместить в functions.php куда более сложный код:

function disable_embeds_code_init ( ) { // Remove the REST API endpoint. remove_action ( 'rest_api_init' , 'wp_oembed_register_route' ) ; // Turn off oEmbed auto discovery. add_filter ( 'embed_oembed_discover' , '__return_false' ) ; // Don't filter oEmbed results. remove_filter ( 'oembed_dataparse' , 'wp_filter_oembed_result' , 10 ) ; // Remove oEmbed discovery links. remove_action ( 'wp_head' , 'wp_oembed_add_discovery_links' ) ; // Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action ( 'wp_head' , 'wp_oembed_add_host_js' ) ; add_filter ( 'tiny_mce_plugins' , 'disable_embeds_tiny_mce_plugin' ) ; // Remove all embeds rewrite rules. add_filter ( 'rewrite_rules_array' , 'disable_embeds_rewrites' ) ; // Remove filter of the oEmbed result before any HTTP requests are made. remove_filter ( 'pre_oembed_result' , 'wp_filter_pre_oembed_result' , 10 ) ; } add_action ( 'init' , 'disable_embeds_code_init' , 9999 ) ; function disable_embeds_tiny_mce_plugin ( $plugins ) { return array_diff ( $plugins , array ( 'wpembed' ) ) ; } function disable_embeds_rewrites ( $rules ) { foreach ( $rules as $rule => $rewrite ) { if ( false !== strpos ( $rewrite , 'embed=true' ) ) { unset ( $rules [ $rule ] ) ; } } return $rules ; }

function disable_embeds_code_init() { // Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route' ); // Turn off oEmbed auto discovery. add_filter( 'embed_oembed_discover', '__return_false' ); // Don't filter oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 ); // Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); // Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' ); // Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); // Remove filter of the oEmbed result before any HTTP requests are made. remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 ); } add_action( 'init', 'disable_embeds_code_init', 9999 ); function disable_embeds_tiny_mce_plugin($plugins) { return array_diff($plugins, array('wpembed')); } function disable_embeds_rewrites($rules) { foreach($rules as $rule => $rewrite) { if(false !== strpos($rewrite, 'embed=true')) { unset($rules[$rule]); } } return $rules; }

function my_deregister_scripts ( ) { wp_dequeue_script ( 'wp-embed' ) ; } add_action ( 'wp_footer' , 'my_deregister_scripts' ) ;

function my_deregister_scripts(){ wp_dequeue_script( 'wp-embed' ); } add_action( 'wp_footer', 'my_deregister_scripts' );

Источник решения эта статья . Конечно, при внедрении следует помнить, что допущенные ошибки могут «сломать» сайт, поэтому советую сделать запасную версию файла функций перед его изменением.

Итого. В принципе, отключать Embed в WordPress не обязательно, данная фишка в большинстве случаев никакого плохого эффекта не делает. С другой стороны, если вы точно не собираетесь ее использовать, можно все же деактивировать через сниппет или модули.

rss