Як вимкнути oEmbed у WordPress
Для відключення oEmbed у WP можна використовувати спеціальний плагін Disable Embeds . Але також це можна зробити кодом. Нижче розглянемо варіант із використанням коду.
Відключимо oEmbed маршрут (можливість, щоб наш сайт був постачальником oEmbed):
add_action( 'init', 'wpkama_disable_embed_route', 99); function wpkama_disable_embed_route(){ // Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route'); // Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links'); // Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', function ( $rules ){ foreach( $rules as $rule => $rewrite ){ if( false !== strpos( $rewrite, 'embed=true' ) ){ unset($rules[$rule]); } } return $rules; } ); }
Повністю відключаємо всі вбудовування у контенті
Скасування цих хуків повністю відключить можливість вбудовувати посилання на окремому рядку в контенті, а також роботу шорткоду .
// Remove shortcode parser remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 ); remove_filter( 'widget_text_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 ); // Remove embed url parser remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 ); remove_filter( 'widget_text_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
Відключаємо вбудовування конкретних URL-адрес (конкретних провайдерів)
Вимикаємо вбудовування для внутрішніх посилань сайту
Нам потрібно, щоб вбудовування не працювало, коли ми вказуємо в пості посилання на поточний сайт на окремому рядку:
// Remove filter of the oEmbed result before any HTTP requests are made. remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10);
Відключаємо усі невідомі провайдери
Це провайдери, які не зареєстровані у WP, але вони мають discovery <link> за яким WP може отримати код вбудовування. Наприклад, таким посиланням може бути посилання на інший сайт WordPress.
// Remove oEmbed iframes communicate JavaScript з front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js'); // Turn off oEmbed auto discovery request for unknown URLs. add_filter( 'embed_oembed_discover', '__return_false');
Відключаємо відомих провайдерів . Для цього використовуємо функцію wp_oembed_remove_provider() .
У цьому випадку нам потрібно буде точно вказати формати посилань для провайдерів, які ми хочемо відключити.
add_action( 'init', 'my_remove_oembed_providers', 99); function my_remove_oembed_providers(){ // existing providers // print_r(_wp_oembed_get_object()->providers); $ remove_formats = [ // youtube '#https?://((m|www).)?youtube.com/watch.*#i', '#https?://((m|www).)?youtube.com/playlist.*#i', '#https?://youtu.be/.*#i' ]; foreach( $remove_formats as $format ){ wp_oembed_remove_provider( $format ) } }
Помилки, що робити не потрібно
У мережі багато де додається наступний хук для відключення провайдерів. Цього робити не можна! Цей хук потрібний для безпеки під час вбудовування! Він спрацьовує безпосередньо при вбудовуванні, тому правильніше відключити вбудовування, а не цей хук.
// Не фільтрує (HTML sanitize) oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10);
Читайте Детальніше про безпеку .