Отключите автоматическое добавление URL-адреса YouTube в контент


Я запускаю небольшой сайт на основе wp с пользовательским контентом. Пользователи часто отправляют ссылки на YouTube. А затем wordpress автоматически преобразует эти ссылки в видео, что в нашем случае нежелательно. Мне нужно переопределить это автоматическое поведение, чтобы отправленные ссылки на YouTube оставались в plain text urls ?

Я обнаружил, что могу удалить самого поставщика oembed с помощью чего-то вроде wp_oembed_remove_provider('http://www.youtube.com/oembed'), но я в тупике, как мне использовать это в моем случае, когда $content строка, содержащая URL-адрес, а также отправленное содержимое публикации? Страница кодекса мало что говорит об этом. Не мог бы кто-нибудь привести мне пример того, как это можно сделать.

Другими словами, мне нужно, чтобы oEmbed пропускал любые ссылки на YouTube в контенте. Также, пожалуйста, дайте мне знать, есть ли лучший/более эффективный способ решения этой проблемы.

 1
Author: gurung, 2015-09-12

2 answers

Отключите oembed, как показано ниже в functions.php :

remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );

Спасибо!

 4
Author: jas, 2015-09-12 09:17:17

Принятый ответ в моем случае не сработал. URL-адреса все еще преобразовывались во встраиваемые в редакторе сообщений.

Посмотрев на источник wp-includes/class-wp-embed.php когда этот материал обрабатывается, я обнаружил, что здесь есть и другие вещи:

// Hack to get the [embed] shortcode to run before wpautop()
add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 );

// Shortcode placeholder for strip_shortcodes()
add_shortcode( 'embed', '__return_false' );

// Attempts to embed all URLs in a post
add_filter( 'the_content', array( $this, 'autoembed' ), 8 );

// After a post is saved, cache oEmbed items via AJAX
add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) );

Что исправило проблему для меня, так это отключение их в моих файлах тем, например:

remove_shortcode( 'embed' );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 );
remove_action( 'edit_form_advanced', [ $GLOBALS['wp_embed'], 'maybe_run_ajax_cache' ] );
 7
Author: Chris Montgomery, 2015-11-09 15:12:15