J'ai une demande AJAX qui renvoie un message. Le post_content
contient des liens vers Twitter, YouTube, TED et d'autres plates-formes enregistrées en tant que fournisseurs oEmbed dans une installation par défaut de Vanilla WordPress. À ce jour, le gestionnaire oEmbed de WordPress ne les enregistre pas et affiche les liens simples et rien d'autre.
Comment puis-je récupérer du contenu via AJAX avec le support oEmbed?
En fait, c’était assez facile, quand vous savez ce qui manque: L’identifiant de publication actuel de l’objet global $wp_embed
, afin qu’il sache à quoi se référer. La raison en est simple: les oEmbeds sont mis en cache sous forme de métadonnées post. Par conséquent, sans connaître l'ID, MarkUp ne peut pas être récupéré et remplacé dans le contenu.
// 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 );
C'est tout.
Plus d'informations approfondies sur oEmbed et la mise en cache peuvent être trouvées dans une réponse associée de @birgire.