Tout savoir sur WordPress
Tutoriel WordPress

Afficher un champ personnalisé en dehors de la loop

Grâce à l’astuce suivante, vous allez voir comment faire pour afficher un champ personnalisé en dehors de la loop WordPress.

Les champs personnalisés sont une forme de méta-données qui vous permettent de stocker des informations arbitraires dans chaque article de WordPress.

En principe, on affiche ces informations à l’intérieur DE la loop (boucle) WordPress, mais comment doit-on s’y prendre pour afficher un champ personnalisé en dehors de cette loop ?

Il suffit d’utiliser la variable globalE $wp_query qui permet de récupérer l’id de l’article en cours en dehors de la loop.

Ensuite, on récupère la valeur du champ personnalisé grâce à la fonction get_user_meta() et on pourra préciser l’id de l’article avec $wp_query->post->ID.

global $wp_query;
echo get_post_meta( $wp_query->post->ID , 'Votre-Custom-Field', true);
Cet article a été mis à jour il y a 2312 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

31 Commentaires

  1. Tu n’a pas besoin d’appeller la fonction wp_reset_query(), car ton code ne pertube pas la requête principal de WordPress.

    Concernant la façon dont tu récupères l’ID, il y a plus élégant avec la méthode :
    $wp_query->get_queried_object_id();

    • Merci pour les précisions !

      En effet, le wp_reset_query() ne sert à rien puisque nous somme en dehors de la loop et qu’on n’utilise pas de query_posts();

  2. Quelle différence entre ça et faire :
    global $post;
    echo get_post_meta( $post->ID , ‘Votre-Custom-Field’, true);
    ?

  3. @Julio : c’est vrai qu’il n’y a pas de différence.

    Quel appel est le plus optimisé à ton avis ?

  4. Au passage:
    global $wp_query;
    $wp_query->get_queried_object_id();
    a un wrapper qui est :
    get_queried_object_id();
    De quoi faire gagner encore quelques octets au script.

    Ce qui est le plus optimisé ? Soit le code cette astuce, soit le mien, mais le fait d’appeler get_queried_object_id() est le moins opti car elle fait un appel à get_page (un wrapper de get_post) qui elle fait appel à _get_post_ancestors() qui peut aller jusqu’à faire une requête en BDD.
    Wow tout ça pour … choper un ID de post ?
    J’espère qu’Amaury va me contredire, vraiment…

  5. @Likobu : Il faudrait être un peu plus constructif pour que le puisse savoir ce qu’il ne fonctionne pas ;)

  6. Bonjour
    Je ne connais pas grand chose, comment faire pour mettre le résultat dans une variable ?
    get_post_meta( $wp_query->post->ID , ‘youtube’, true)

    quelque chose comme ca ?

    $youtube = « get_post_meta( $wp_query->post->ID , ‘youtube’, true) »;

  7. Et petite question
    J’ai 2 champs que je personnalise dans 90% de mes articles
    Comment faire pour qu’il me les propose directement ?
    Car par defaut je peux ajouter un champs, et apres je suis obligé de publier l’article, pour ensuite qu’il me propose d’en ajouter un 2eme, je ne sais pas si ca vous fait ca vous aussi

  8. @Ced : c’est presque ça !

    Il faut juste enlever les guillements pour obtenir le résultat ci-dessous :
    $youtube = get_post_meta( $wp_query->post->ID , ‘youtube’, true);

  9. @Ced: Si vous savez programmer un peu, vous pouvez créer une metaxbox. Je vous laisse chercher sur Google, il existe des dizaines de tutos à ce sujet :)

  10. Pardon, je viens de relire mon commentaire, je vois que j’ai bouleté grave ahahah, je suis désolé.

    Non alors je vous explique ma problématique, j’ai une page index.php qui liste des articles en dehors de la boucle (d’ailleurs elle n’est même pas appelée), je n’arrive simplement pas à utiliser les champs personnalisés pour les afficher, je vous colle comment j’ai construit ça (exemple pour récupérer les tags):

    array( 7 ),
    ‘posts_per_page’ => 4

    );

    $quatre_premiers_posts = $wp_query_object->query( $criteres_de_recherche );

    //echo $quatre_premiers_posts[0]->post_title;
    //print_r( $quatre_premiers_posts );

    /* générer les tags des posts
    *******************************/

    $t0 = wp_get_post_tags($quatre_premiers_posts[0]->ID);
    $t1 = wp_get_post_tags($quatre_premiers_posts[1]->ID);

    Et voici comment je fais pour afficher mes données:
    post_date);?> | name; ?> | name; ?>

    Voilà pour le petit exemple, par contre je galère gravissime pour les champs personnalisés, si vous avez des idées… :D

  11. @Likobu Euh, je ne vois pas pourquoi vous utilisez wp_get_post_tags pour récupérer les informations des articles. Cette fonction permet de récupérer les tags d’un article !

  12. Alors alors!

    C’était juste un exemple pour vous expliquer la logique de construction du site et de la récupération de mes données, en l’occurrence ici effectivement les tags. Je crois que je vais vous collez l’entier du truc afin que vous compreniez (et maintenant que vous m’avez fais découvrir pastebin, je vais vous en coller, du code): http://pastebin.com/Matbfx4P

    Pour la théorie: C’est un site/blog ou je récupère seulement les 4 premiers articles et les deux premiers articles de la catégorie « agenda ». Je voudrais récupérer mes custom fields mais je n’y arrive à priori pas (ça me renvoie un « Array » vide).

  13. Bonjour all(e)

    Peut-on récupérer la valeur d’un champ perso mais en étant sur la page d’accueil, donc sans pouvoir se raccrocher à un post->id ?
    J’ai bien essayé de remplacer le code offert dans cet article par ça
    post->20 (l’id de ma page, mais comme je me doutais ça ne fonctionne pas).

    Une idée ?

  14. Merci de pencher sur mon sujet Jonathan ^^

    Je viens d’essayer ça global $wp_query;
    echo get_post_meta( $wp_query->post->20 , ‘nom_du_menu’, true);

    Sans succès. Ca plante même la page (genre die)

  15. Bonjour,
    Est ce que c’est possible de récupérer la valeur d’une metabox mais en étant sur la page d’accueil ?
    J’ai créé une metabox checkbox projet du mois.
    Ce que je cherche c’est d’afficher le projet du mois
    avec get_post_meta impossible qu’il a besoin d’un post->id

    get_post_meta( ici quoi mettre , 'projet_mois', true);

    Ou est ce qu’il faut passer par une requete sql qui recherche la case cochée ?

  16. Bonjour,
    j’ai trouve la solution avec meta_key ca pourra servir

    $args = array( 'post_type' => 'creation','meta_key' => 'projet_mois', 'meta_value' => 'on', 'meta_compare' => LIKE );
    $query = new WP_Query( $args );

    Merci pour ton site

  17. Salut! J’ai besoin de votre aide.
    Votre article m’a mis sur la piste mais j’ai toujours du mal.
    J’ai créé une catégorie supplémentaire appelée « village » avec le plugin TYPES.
    Seulement maintenant j’aimerai me resservir de la valeur de cette variable pour l’intégrer dans mon index.php qui liste les derniers articles.
    Pour chaque article il y a l’image à la une et une vignette par dessus qui précise le village concerné par l’article.
    Il faut que je transforme cette ligne [code]cat_name; ?>[code]
    Comment dois-je m’y prendre svp?

595e232894cb6eba436a092734ba890b&&