Intereting Posts
Как отфильтровать сообщение в виджете Tag Cloud, используя теги изображения мультимедийной библиотеки, прикрепленные к сообщению? Настроить форму ответа, отличную от формы комментария Порядок по категориям и публикация в пользовательском запросе WP Member plugin – зарегистрировать утверждение, ограничить загрузку, только страницы участников блочное тестирование пароля администратора Предотвращение перечисления пользователей: какая логика лучше? Неопределенная переменная: строка? WordPress Короткое описание стиля списка Как добавить значок на определенный палец прерывание строки не работает при редактировании сообщения Ошибка пользовательской загрузки WordPress настраиваемое поле в столбцах администратора Шаблоны плагинов против родительской темы Можно ли получить ссылку на страницу из ее пули? Отзывчивый вопрос со вторичным логотипом – не придерживаться позиции

Получение результатов от wp_oembed_add_provider

У меня возникли проблемы с получением результатов из wp_oembed_add_provider () .

Я разрабатываю сайт, который должен встраивать видеоконтент из Facebook, и я нашел этот удобный список структур URL-адресов Facebook.

Начнем с того, что я собираюсь начать с #https?://(www\.)?facebook\.com/.*/videos/.*#i как это соответствует видео, которое я тестирую.

Боковая точка: это может быть или не быть проблемой, но я не понимаю, почему существует # и они не сбрасываются, поскольку эти методы обычно недействительны в регулярном выражении (согласно моему ограниченному пониманию регулярные выражения). Однако он соответствует формату примера YouTube в кодексе .

Это в моих functions.php :

 add_action("init", function(){ wp_oembed_add_provider( '#https?://(www\.)?facebook\.com/.*/videos/.*#i', 'https://www.facebook.com/plugins/video/oembed.json/', true ); }); 

URL-адрес, который я пытаюсь выполнить, это: https://www.facebook.com/899lightfm/videos/972261526144646/

И конечная точка для Facebook кажется правильной, так как https://www.facebook.com/plugins/video/oembed.json/?url=https://www.facebook.com/899lightfm/videos/972261526144646/ возвращает действительный ответ.

В сообщении у меня есть URL-адрес видео в его собственной строке, за которым следует аналогичный URL-адрес YouTube в отдельной строке. URL-адрес YouTube успешно обнаружен и превращен в oembed – как и следовало ожидать, если WordPress поддерживает его изначально, но URL-адрес Facebook не изменяется и вместо этого просто распечатывается простым текстом.

Я правильно использую и подключаю wp_oembed_add_provider() ? Есть ли что-то еще, что я должен делать, чтобы WordPress выбрал это?

EDIT : я попытался подключиться к after_setup_theme в случае, если init был слишком запоздалым, но я получаю ту же проблему. Вокруг веб- init казалось, было более распространенным действием для подключения wp_oembed_add_provider() в.

Solutions Collecting From Web of "Получение результатов от wp_oembed_add_provider"

Хорошо, мне удалось это решить!

Кто-то прорычал, как работает система встраивания, и оказалось, что использование wp_oembed_add_provider() было неправильным. Отладка autoembed_callback() в wp-includes\class-wp-embed.php autoembed_callback() wp-includes\class-wp-embed.php показала, что мой URL-адрес YouTube прошел, но мой URL-адрес Facebook никогда не wp-includes\class-wp-embed.php в эту функцию.

Echo'ing сообщения после того, как он прошел через autoembed() (подключен к the_content() ), показал, что по какой-то причине URL-адрес Facebook был «не на новой строке», как требуется autoembed() и был завернут в <p></p> , а также часть другой строки, хотя она явно была на собственной новой строке в редакторе.

Я не уверен, почему URL-адрес FB не попал в его собственную строку, но, используя подсказку о том, как работает autoembed() , я добавил следующее к моим functions.php :

 add_filter("the_content", function($content){ // Find URLs that are on their own line but are wrapped in <p></p> tags return preg_replace_callback( '|^\<p\>(\s*)(https?://[^\s"]+)(\s*)\</p\>$|im', array($GLOBALS["wp_embed"], "autoembed_callback"), $content ); }, 11); 

До тех пор, пока это выполняется после wpautop() (который запускается на the_content по умолчанию 10), обе ссылки правильно перемещаются в новую строку, завернутые в теги <p></p> , и эта функция отправляет обнаруженные URL-адреса до autoembed_callback , и в этот момент все autoembed_callback , как следует.

Уф. Таким образом, реальная проблема связана с разрывами строк и, возможно, с тем, как WordPress обнаруживает URL-адреса для автоматического встраивания. Я полагаю, что регулярное выражение в ядре, вероятно, было бы лучше, чтобы подобрать крайние случаи, но, надеюсь, эта дополнительная функция догоняет эту проблему. Я обновлю это, если столкнутся с любыми дополнительными проблемами, которые это вызывает.