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:
<!-- 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) :
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)...
<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 !
-----
Pingback: La boîte à Wordpress ! [8/12]()
Pingback: How to: Get permalink outside of the loop()
Pingback: Stupid Wordpress tricks | Linux Shtuff()
Pingback: How To Display WordPress Permalinks Outside of the Loop # WordPress Tricks & Tips()
Pingback: WordPress Tricks Part 1 | [ XenriTech ].com()
Pingback: Wordpress tricks and shortcut functions | Dzine TipsDzine Tips()
Pingback: Muriel Daumerie()