Как использовать oEmbeds для публикации контента во время AJAX-запросов


У меня есть запрос AJAX, который возвращает сообщение. post_content содержит ссылки на Twitter, YouTube, TED и другие платформы, которые зарегистрированы как поставщики oEmbed в стандартной установке ванильного WordPress. К настоящему времени обработчик oEmbed WordPress не регистрирует их и отображает простые ссылки и ничего больше.

Как я могу получать контент через AJAX с поддержкой oEmbed?

Author: kaiser, 2015-09-14

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.

 6
Author: kaiser, 2017-04-13 12:37:34