web-dev-qa-db-fra.com

Utiliser l'intégration automatique avec get_post ()

J'ai le script PHP hors du répertoire WordPress où je reçois le contenu d'un message spécifique et que j'essaie maintenant d'appliquer le filtre oembed:

include('../wp-load.php');
$thePost = get_post(42, ARRAY_A);
$theContent = $thePost['post_content'];

Le contenu de l'article contient du texte et une ou plusieurs URL de YouTube (ou des pages similaires). Évidemment, WordPress est capable de découvrir ces URL et de les réécrire pour les incorporer, mais je ne sais pas comment appliquer ce comportement à mon extrait de code.

Je sais qu'il existe wp_oembed_get, mais cette fonction ne permet pas la détection automatique.

Une idée comment y parvenir?

1
Patrick

Vous devez définir l'objet global $post dans votre publication. Ceci est fait par les fonctions de boucle dans votre thème, c'est pourquoi il fonctionne là-bas.

OEmbed de WP remplace les URL lors du filtre the_content. Mais il remplace les URL par deux moyens. Le premier consiste en une simple recherche rationnelle et son remplacement pour certaines URL, telles que Google Video, ou la liaison directe à un fichier avec une extension de format vidéo.

La deuxième façon dont oEmbed s'en occupe est la manière dont la plupart des services (tels que YouTube) sont gérés. La seconde façon est similaire à la première, à la différence que les résultats sont stockés dans la table postmeta, raison pour laquelle nous devons définir le $post. Dans un deuxième temps, il est demandé aux différents gestionnaires de services si une URL leur appartient. Si l'URL est la leur, ils vont générer le code HTML pour l'incorporer. Ensuite, oEmbed met en cache le code HTML de l'URL dans la table postmeta. La raison en est qu’un service peut nécessiter un appel d’API à distance pour obtenir le code HTML, et nous souhaitons minimiser cette surcharge chaque fois que la publication est affichée.

include('../wp-load.php');
$thePost = get_post(42);

// Set our post to the globally used $post object as oEmbed will use it to do a meta value lookup
global $post; 
$post = $thePost;

echo apply_filters('the_content', $thePost->post_content );
3
Seamus Leahy

"autoembedding", du moins la dernière fois que j'ai vérifié, fonctionne en raison d'un filtre sur the_content. Votre code ne s'applique pas ce filtre.

$thePost = get_post(42, ARRAY_A);
$theContent = $thePost['post_content'];
echo apply_filters('the_content',$theContent);

En supposant que WordPress Core se charge correctement, les intégrations devraient fonctionner.

1
s_ha_dum