Intereting Posts
Плагины для клонирования сайта wordpress и перехода к другому URL-адресу is_page условный вопрос Почему WordPress имеет noop.php-файл? Как добавить пользовательскую константу к термину? Как обновить виджет из функции widget ()? Пользовательская роль не имеет доступа к панели управления Используя функции wp_dropdown_users и selected ()? Добавить категорию ссылок на активацию? Извлеките изображение из содержимого, назначьте его как признак, а затем удалите его из содержимого Мой URL-адрес действия формы добавляется с каталогом, который не существует Проверка шаблонов страниц в дочерней теме Администрирование шаблона Ошибка после обновления WP 4.8 переписать правила для пользовательского пост-типа с пользовательской таксономией Enhancin 404 содержит поиск по URL-адресу Загрузка профиля пользователя WordPress – если страница сохранена сбрасыванием файла

Обнаружение встроенных 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 

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