Обнаружение встроенных URL-адресов В post_content

Мне нужно изменить способ вывода WP html при вводе URL-адреса встраивания в контент. Пример содержимого в редакторе WP:

This is standard content and will be wrapped in a 'p' tag. But check out this cool vid: http://www.youtube.com/watch?v=3JJv4TvURj4 This will be output as another 'p' tag. The above URL will be turned into an iFrame. 

Цель заключается в том, чтобы клиент мог ввести что-то простое, и изменить способ, которым wordpress выводит его на страницу. Я использую фильтр oembed_dataparse для хорошего эффекта до сих пор, но я хотел бы взять URL-адрес видео и передать его другой функции вне фильтра . Как я могу это сделать?

Мой первоначальный подход состоял в том, чтобы использовать глобальную переменную. Вот мой сокращенный код фильтра:

 add_filter('oembed_dataparse', 'modal_embed', 10, 3); function modal_embed($html, $data, $url) { // This is supposed to store the URL globally so I can access it // outside this filter. global $video_url; $video_url = $url; $custom_output = "<div class='video'>$html</div>"; // Just an example. return $custom_output; } 

Код, который я создаю как $custom_output работает просто отлично и отображается на странице. Проблема в том, что я не получаю доступ к $video_url глобально, как я ожидал. Есть предположения? Благодарю.

Solutions Collecting From Web of "Обнаружение встроенных URL-адресов В post_content"

Хорошо понял. Я просто немного подкопался в wp core и нашел функцию, которую они используют для захвата автодетектов. WP использует функцию php preg_replace_callback функции autoembed WP. Вот код, как видно из wp-includes/class-wp-embed.php :

 /** * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding. * * @uses WP_Embed::autoembed_callback() * * @param string $content The content to be searched. * @return string Potentially modified $content. */ function autoembed( $content ) { return preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content ); } 

Поскольку я планирую только, чтобы клиент вводил одно видео за сообщение, я использую preg_match вместе с этим же регрессионным тестом для достижения того, чего хочу:

 function embed_url_lookup() { if (!have_posts()) return false; the_post(); // necessary to use get_the_content() $reg = preg_match('|^\s*(https?://[^\s"]+)\s*$|im', get_the_content(), $matches); if (!$reg) return false; return trim($matches[0]); } // end embed_url_looku 

Это найдет первый автоматический код и вернет его.