Aujourd’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é!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.