WordPress et les informations en dehors de la boucle !

Si vous développez sous WordPress, il y a forcément un moment où vous vous êtes demandé "Comment récupéré des informations lié au billet en cours en dehors de la boucle ?" ! Car oui la boucle c'est le pied, mais dès que l'on veut partir dans un thème un peu exotique, comme afficher les méta données dans la barre latérale plutôt que dans la boucle ... et bien selon les cas celà peut s'avérer laborieux ! Voici donc différentes techniques pour recuperer toutes les données de votre billet en dehors de la boucle !

1ère solution: la variable PHP $post

Il faut savoir que lors de l'affichage d'une page, WordPress crée tout un tas de variables contenant diverses informations liées au blog et au contenu en cours d'affichage. Et bien évidement il y a une variable qui contient toutes les données lié au billet en cours d'affichage, il s'agit de la variable $post. Elle contient en fait un objet PHP dont on va pouvoir extraire les infos de la manière suivante:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <!-- Contenu du billet, titre, etc ... à l'intérieur de la boucle -->
<?php endwhile; endif: ?>

<div id="sidebar">
        Le billet "<?php echo $post->post_title; ?>" à été rédigé le <?php echo $post->post_date; ?>.
        <a href="<?php echo $post->guid; ?>" >Lien vers l'article</a>
     
        <!-- Blogroll, archive, etc ... -->
</div>

Voici toutes les données que l'on peut recuperer:

  • $post->ID;//ID du billet
  • $post->post_author;//ID de l'auteur
  • $post->post_date;//Date de publication
  • $post->post_date_gmt;//Date de publication au format GMT
  • $post->post_content;//Contenu du billet
  • $post->post_title;//Titre du billet
  • $post->post_category;//ID de la catégorie du billet
  • $post->post_excerpt;//Résumé si existant
  • $post->post_status;//Etat du billet (publié, brouillon, etc ...)
  • $post->comment_status;//Etat des commentaires (férmé, privé, ouvert)
  • $post->ping_status;//Ping actif ou pas
  • $post->post_password;//Mot de passe du billet, si définit
  • $post->post_name;/Slug (pour permalink) du billet
  • $post->to_ping;//Sites à prévenir
  • $post->pinged;//Sites prévenus
  • $post->post_modified;//Date de la dernière modifications du billet (= à post_date si pas de modif)
  • $post->post_modified_gmt;//Date au format GMT de la dernière modifications du billet
  • $post->post_content_filtered;//Bonne question !
  • $post->post_parent;//Si il s'agit d'un attachement alors retourne l'ID du billet lié, sinon retourne 0
  • $post->guid;//URL brute (?p=ID) du billet
  • $post->menu_order;//Pour page
  • $post->post_type;//Indique si il s'agit d'une page, d'un article ou d'un attachement
  • $post->post_mime_type;//Dans le cas d'un attachement, renvoi le type de fichier (image, flash, etc ...)
  • $post->comment_count;//Le nombre de commentaires du billet
  • $post->ancestors;//?

2ème solution: Faire un appel à la base de donnée avec la fonction get_post

Bon, cette solution n'est à utiliser que si vous n'avez pas d'autre choix car elle fait un appel supplémentaire vers votre base de données et WordPress est déjà assez lourd en requête comme ça sans que l'on vienne en remettre une couche. De plus l'utilisation de cette fonction nécessite que l'on connaisse l'ID du billet duquel on veut recuperer les infos, et si vous avez son ID, il y a des chances que vous ayez aussi le reste des infos (cf. la variable $post). En fait je me sers uniquement de cette fonction lorsque j'utilise un hook qui ne renvoi que l'ID du billet en paramètre, comme ça je peux recuperer le reste des infos facilement.

Voici comment s'en servir (en reprenant l'exemple précédent) :

<?php $post_infos = get_post($ID); ?>
Le billet "<?php echo $post_infos->post_title; ?>" à été rédigé le <?php echo $post_infos->post_date; ?>.
<a href="<?php echo $post_infos->guid; ?>" >Lien vers l'article</a>

Donc on stock le resultat de la fonction dans une variable ($post_infos), ensuite l'utilisation est identique à la méthode du $post sauf que l'objet est stocké cette fois-ci dans $post_infos. Les infos récupérée sont aussi identique à la méthode $post

Oui mais, ... certaines données ne sont toujours pas accessible

Alors il reste un détail à régler avec ces méthodes. Comment recuperer des informations tel que le véritable permalien (sans le ?p=ID si vous utilisez la réécriture d'URL) ou le titre (si il passe par une moulinette) ?

Et bien heureusement WordPress a prévu des fonctions pour celà ! Voici comment procéder (toujours en me basant sur le 1er exemple)...

Le billet "<?php echo get_the_title($post->ID); ?>" à été rédigé le <?php echo $post->post_date; ?>.
<a href="<?php echo get_permalink($post->ID); ?>" >Lien vers l'article</a>

On utilise les fonctions standards get_the_title et get_permalink en leurs passant l'ID du billet en paramètre.

Conclusions

Voilà, vous n'avez plus d'excuses pour ne pas vous mitonner un petit thème customisé qui éblouira vos visiteurs (Comment ça j'en fait trop ?) 😀

WordPress it's magic !

-----

Articles relatifs

  • Excellent, tout simplement! le genre de truc dont a forcément besoin un jour ou l’autre.

  • Hum… je crois bien que ça va me servir tout ça. Merci beaucoup k-ny 😉

  • Pingback: La boîte à Wordpress ! [8/12]()

  • Pingback: How to: Get permalink outside of the loop()

  • Reynald Bouttard

    Informations très précieuses, merci bcp !

  • Lanteri

    Salut, merci pour les infos (ya aussi tout le tatsoin dans la page du codex WP… et presqu’entièrement en français).
    Par contre, j’ai un petit pb:
    Lorsque je veux envoyer un article par email (grâce à WP-Email), l’article envoyé n’est pas dans le format initial (pagination html différente) et accessoirement, ne contient pas, par exemple, la carte « MapPress » qui est dans l’article.
    Aurais-tu une idée de comment:
    1 garder la mise en forme (pagination html de l’article)
    2 garder tout le contenu

    ps: WP-2.8.2, plugin WP-Email
    dans la config du plugin, ya une fenêtre qui permet de « formater » le message envoyé et apparement, le code php ne passe pas.

  • Lanteri

    a oui…. merci pour toute info….

    jérôme

  • Pingback: Stupid Wordpress tricks | Linux Shtuff()

  • Salut,merci pour toutes ces infos ))
    Je voudrais maintenant savoir comment on récupère toutes les titres du post ( les post_title ) de toute une catégorie.
    Merci d’avance.
    Bonne Soirée

  • Pingback: How To Display WordPress Permalinks Outside of the Loop # WordPress Tricks & Tips()

  • salut
    j’ai un problème d’affichage de la date. J’ai utilisé ça
    $post->post_date;

    mais ça retourne une date avec en 1er l’année ensuite le mois et le jour + l’heure du billet

    est-ce possible d’avoir une date au format jj/mm/aa avec le même style de code ? Je ne suis pas développeur php mais designer donc désolé le code j’y connais pas grand chose !

    merci d’avance !

  • Pingback: WordPress Tricks Part 1 | [ XenriTech ].com()

  • JO3LEFOU

    et pour sortir un custom Post_Type ?

  • Jérémy

    Eh oui ! On peut personnaliser beaucoup de choses avec WordPress. Et les fonctions déjà existantes nous facilitent la tâche.

  • gUY

    Trois ans aprés, ton post est encore utile 😉

    Merci, c’est exactement la liste qu’on a besoin d’avoir sous le coude 😉

  • Patrick

    Bonjour,

    Petite question …
    J’aimerais par exemple que si on accède à une page de mon blog par un lien contenant une variable (ex mondomaine.com/page1?mon_nom=Patrick) j’aimerais pouvoir afficher dans mon contenu ‘Bonjour Patrick’ par exemple en récupérant le contenu de la variable ‘mon_nom’

    J’ai bien une idée qu’il faut passer par une fonction dans functions.php et ajouter un shortcode mais peut-être il y a une piste plus simple ?

    Merci
    Patrick

  • Pingback: Wordpress tricks and shortcut functions | Dzine TipsDzine Tips()

  • Pingback: Muriel Daumerie()