Отключите автоматическое добавление URL-адреса YouTube в контент
Я запускаю небольшой сайт на основе wp с пользовательским контентом. Пользователи часто отправляют ссылки на YouTube. А затем wordpress автоматически преобразует эти ссылки в видео, что в нашем случае нежелательно. Мне нужно переопределить это автоматическое поведение, чтобы отправленные ссылки на YouTube оставались в plain text urls
?
Я обнаружил, что могу удалить самого поставщика oembed с помощью чего-то вроде wp_oembed_remove_provider('http://www.youtube.com/oembed')
, но я в тупике, как мне использовать это в моем случае, когда $content
строка, содержащая URL-адрес, а также отправленное содержимое публикации? Страница кодекса мало что говорит об этом. Не мог бы кто-нибудь привести мне пример того, как это можно сделать.
Другими словами, мне нужно, чтобы oEmbed пропускал любые ссылки на YouTube в контенте. Также, пожалуйста, дайте мне знать, есть ли лучший/более эффективный способ решения этой проблемы.
2 answers
Отключите oembed, как показано ниже в functions.php :
remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
Спасибо!
Принятый ответ в моем случае не сработал. 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' ] );