Как использовать oEmbeds для публикации контента во время AJAX-запросов
У меня есть запрос AJAX, который возвращает сообщение. post_content
содержит ссылки на Twitter, YouTube, TED и другие платформы, которые зарегистрированы как поставщики oEmbed в стандартной установке ванильного WordPress. К настоящему времени обработчик oEmbed WordPress не регистрирует их и отображает простые ссылки и ничего больше.
Как я могу получать контент через AJAX с поддержкой oEmbed?
1 answers
На самом деле это было довольно просто – когда вы знаете, чего не хватает: текущего идентификатора записи для глобального объекта $wp_embed
, чтобы он знал, на что ссылаться. Причина проста: oEmbeds кэшируются как метаданные публикации, поэтому, не зная идентификатора, разметка не может быть извлечена и заменена в содержимом.
// grab a post from the database
/** @var \WP_Embed $wp_embed */
global $wp_embed;
/** @var \WP_Post $post; */
// Add the fetched posts ID and add it to the global object
$wp_embed->post_ID = $post->ID;
// Execute the [embed] shortcode
$wp_embed->run_shortcode( $post->post_content );
// Execute the oEmbed handlers for plain links on the own line
$wp_embed->autoembed( $post->post_content );
Вот и все.
Более подробную подробную информацию об oEmbed и кэшировании можно найти в соответствующем ответе @birgire.