Récupérer la valeur d'un champ personnalisé dans WordPress hors de la Boucle
https://chierchia.fr/blog/2009/09/wordpress-custom-field-hors-de-la-loopAujourd’hui je vais vous faire partager une petite astuce que j’ai dut utiliser pour l’un de mes projets en cours. La problématique : Comment afficher un custom field lorsqu’on est hors de la loop wordpress?
Il y a quelques jours, je travaillais sur l’intégration d’un design dans le système de blog WordPress, plateforme que j’utilise notamment ici. Dans ma charte graphique, chaque élément du menu de navigation est suivi d’une petite phrase expliquant ce que l’on trouvera dans la page lié. J’avais décidé d’enregistrer ces phrases dans un champ personnalisé pour pouvoir l’afficher très simplement et rapidement avec l’une des fonctions qu’intègre WordPress comme wp_page_menu() ou wp_list_page().
Malheureusement, comme me l’a confirmé mon ami @clawfire, ces deux fonctions n’entrent pas dans ce qu’on appelle la Boucle ou Loop dans le jargon WP, il me fallait donc coder moi même l’affichage du menu intégrant ce champ personnalisé. Voilà la marche à suivre
Sur quelles tables de la base de données doit on travailler?
D’abord il faut savoir dans quelles tables sont enregistrés les données qui nous intéresses. On remarquera que WordPress enregistre les données d’un article dans la table wp_posts, et la table wp_postmeta enregistre d’autres informations moins primordiales comme par exemple quel modèle de page utilise l’article, ET les différents champs personnalisés attachés à l’article.
Au boulot!
Maintenant qu’on sait sur quoi faire notre requête SQL, il est temps de passer à la programmation!
try{ $db = new PDO('mysql:dbname=database;host=localhost','root','pass'); } catch(PDOException $e){ echo "connexion echoué : ".$e->getMessage(); } //on récupère l'ID de la page statique qui sert de page d'accueil du site $strHomepage = "SELECT option_value FROM wp_options WHERE option_name = 'page_on_front'"; $stmt = $db->prepare($strHomepage); $stmt->execute(); $home_id = $stmt->fetch(PDO::FETCH_OBJ)->option_value; //on récupère la valeur de l'option siteurl $strHomeUrl = "SELECT option_value FROM wp_options WHERE option_name = 'siteurl'"; $stmt = $db->prepare($strHomeUrl); $stmt->execute(); $home_url = $stmt->fetch(PDO::FETCH_OBJ)->option_value; //on récupère les infos neccessaires à l'affichage du menu avec la taglines $strTagline = "SELECT * FROM wp_posts p, wp_postmeta m WHERE p.ID = m.post_id AND meta_key = 'nav_tagline' AND post_parent = 0 AND post_type ='page' AND post_status = 'publish' ORDER BY menu_order ASC"; //echo $home_id; $stmt = $db->prepare($strTagline); $stmt->execute(); echo "<ul>"; while($r = $stmt->fetch()){ if($r['ID'] == $home_id){ } else { echo "<li><a href='".$home_url."/?page_id=".$r['ID']."'>".$r['post_title']."<span>".$r['meta_value']."</span></a></li>"; } } echo "<ul>";
Et voilà, notre menu avec un custom field est terminé!
0 Webmentions
No webmentions were found.
- {% for webmention in webmentions %}
- {{ webmention.content }} {% endfor %}
No bookmarks were found.
{% endif %}- {% for webmention in webmentions %}
- {% endfor %}
No likes were found.
{% endif %}- {% for webmention in webmentions %}
- {{ webmention.content }} {% endfor %}
No links were found.
{% endif %}- {% for webmention in webmentions %}
- {{ webmention.title }} {% endfor %}
No posts were found.
{% endif %}- {% for webmention in webmentions %}
- {{ webmention.content }} {% endfor %}
No replies were found.
{% endif %}- {% for webmention in webmentions %}
- {% endfor %}
No reposts were found.
{% endif %}- {% for webmention in webmentions %}
- {% endfor %}
No RSVPs were found.
{% endif %}- {% for webmention in webmentions %}
-
{% if webmention.author %} {% endif %}{% if webmention.content %} {{ webmention.content }} {% else %} {{ webmention.title }} {% endif %} {% endfor %}
No webmentions were found.
{% endif %}