Ajouter des champs personnalisés automatiquement pour chaque nouvel article / page sous WordPress

39 commentaires
Ajouter des champs personnalisés automatiquement pour chaque nouvel article / page sous WordPress

Les champs personnalisés ou custom fields permettent d’ajouter des métadonnées supplémentaires dans vos différents contenus (pages, articles ou types de contenu personnalisés).

Très puissant, ces champs peuvent être créés automatiquement à chaque nouvel article ou autre contenu. Il ne vous restera plus qu’à saisir les valeurs correspondantes ou à les prédéfinir.

Rappelons dans un premier temps qu’un champ personnalisé est composé d’une clé (le nom du champ) et d’une ou plusieurs valeurs.

Capture d'écran - Exemple de champs personnalisé sous WordPress
Un champ personnalisé créé pour chaque nouveau contenu

Pour automatiser leurs créations, il suffit d’ajouter ces lignes de code dans le fichier functions.php situé dans le dossier /wp-content/themes/NOM_DU_THEME/ ou de passer par le back office de WordPress via le menu Apparence puis Éditeur – bien que cette seconde méthode soit plus risquée en cas d’erreurs :

add_action('wp_insert_post', 'wpc_champs_personnalises_defaut');
function wpc_champs_personnalises_defaut($post_id) {
if ( $_GET['post_type'] != 'page' ) {
add_post_meta($post_id, 'custom_field_1', '', true);
add_post_meta($post_id, 'custom_field_2', '', true);
}
return true;
}

Plusieurs informations à savoir concernant ce bout de code :

  • if ($_GET['post_type'] != 'page') { : vous pouvez choisir le type de contenu pour lequel les champs personnalisés seront générés. Dans l’exemple, tous sauf les pages – notez la présence du point d’exclamation. Vous pouvez utiliser la valeur post pour les articles ou le slug de n’importe quel custom post type – en utilisant ou non le point d’exclamation pour gérer des exclusions ;
  • add_post_meta($post_id, 'custom_field_1', '', true); : voici 2 lignes d’exemple créant les champs personnalisés. Ici, 2 champs intitulés custom_field_1 et custom_field_2 seront générés. Libre à vous donc d’ajouter autant de lignes que souhaité avec les noms de vos choix. Notez aussi qu’un troisième argument peut être défini pour indiquer une valeur prédéfinie comme ceci : add_post_meta($post_id, 'custom_field_1', 'ma_valeur_defaut', true);

De nombreux plugins utilisent cette technique pour insérer des métadonnées qui seront alors affichées sur le site ou garder en mémoire dans la base de données pour une utilisation en back office.

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

39 commentaires
  1. Christophe

    Bonjour, je déterre un peu le truc mais vu que le tuto est super, ça va faire un petit up…

    Dans une page (ou un post) est-il possible de mettre plusieurs fois le même champ personnalisé ?
    Par exemple, je liste une série de films : puis-je ajouter un champ personnalisé pour ajouter la date de sortie pour chacun des films, avec une date de sortie différente bien sûr ?
    merci

    1. Aurélien Denis auteur de l’article

      Dans ton cas, passes par l’extension ACF qui te donnera une interface graphique. 😉

  2. olivier

    Bonjour,

    Merci pour ce tuto, ça me parait être une solution à mon problème, mais pour en être certain (et comme je suis novice de chez novice) :

    je gère des annonces sur mon site (des jobs), base WP 4.4.2, qui sont postées automatiquement par un outil qui publie des billets avec des custom_field.

    je souhaite reprendre 2 de ces champs personnalisés (localisation et secteur) pour classer les posts, permettre la recherche, attribuer une image en fonction du secteur.

    Merci pour votre réponse et/ou aide !

    Olivier

  3. Anais

    Merci pour ce tuto bien sympa 🙂 J’ai finalement utilisé une autre méthode pour afficher les champs personnalisés en front-office. J’ai ajouté dans le fichier single.php de mon template.

  4. Simon

    Merci pour cet article.

    Petite question, je voudrais créer un champ personnalisé vignette qui reprendrait automatiquement l’image à la une de l’article ou sinon une image par défaut.

    Du coup le code donnerait ça :

    add_action(‘wp_insert_post’, ‘wpc_champs_personnalises_defaut’);
    function wpc_champs_personnalises_defaut($post_id)
    {
    if ( $_GET[‘post_type’] != ‘page’ ) {
    add_post_meta($post_id, ‘vignette’, ‘la_fonction_qui_reprend_mon_image’, true);
    }
    return true;
    }

    Par contre je ne vois pas comment reprendre automatiquement l’image à la une.

    Merci de ton aide.

  5. Artenis

    Bonjour, est-il possible de n’utiliser que la valeur d’un champ personnaliser ?
    C’est à dire effacer les “ul” et “li” et ne pas afficher le nom du champ personnaliser . Le but étant de pouvoir ajouter des textes ou des url très courts . Le nom du champ personnalisé ne serait utiliser que comme référence . Si ça n’est pas possible comment faire autrement et simplement ?

    1. Artenis

      je réponds à mon propre commentaire :
      au lieu d’utiliser the_meta(); il faut utiliser : echo get_post_meta($post->ID, “nom du champ”, true);

  6. Papa Gaming

    Merci !
    Voilà une astuce bien utiles qui évite les taches répétitives 😉

  7. soykje

    Bonjour à tous,

    Tout d’abord, merci pour ce tuto très utile 🙂 Par contre, j’aurais une question : comme cela a été évoqué en début de liste de commentaires, l’astuce donnée n’empêche pas les doublons de se créer (au contraire même !)…
    Du coup j’aurais voulu savoir s’il était possible de mettre un genre de condition dans ce code, afin que WordPress ne créé pas 20 fois le même champ personnalisé ?!

    1. Aurélien Denis auteur de l’article

      Ca doit être possible… pas le temps de tester. 🙁

  8. superyann

    Salut tlm,

    Vous m’avez l’air d’etre des pros. J’ai une question.. J’ai un theme : minimalisma. J’ai wordpress version 3.5.1.

    Pour le slideshow, ca demande un champ personnalisé nommé : slide.

    J’ai essayé des extentions (2) et je viens d’essayer le bout de code ci-haut et le champs n’apparait pas, est-ce qu,il y a un endroit précisement pour mettre le code ou ca ne fonctionne plus avec 3.5.1 ?

    Sinon comment faire pour avoir un champ personnalisé dans un article?

    Merci !

    1. Artenis

      Salut speryann, au cas ou tu n’ai toujours pas ta réponse:
      comment récupère tu les données de ton champ personnalisé ?
      Dans ton slide et à l’endroit ou tu veux ajouter les informations de ton champ personnalisé, ajoutes-tu bien : ?
      Il est évident qu’auparavant il faut appeler l’id du post ou de la categorie!

  9. Baker

    Tout d’abord très intéressant comme tuto pour un beginner comme moi sous wordpress c’est génial 🙂
    Ensuite j’aurai une question, je ne sais pas si c’est possible mais bon voila:
    comment faire pour afficher les champs personnalisés en fonction du “template de page” que l’on charge … je m’explique j’aimerais afficher les champs personnalisés par défaut pour mon template de page d’accueil et d’autres champs par défaut pour mon template de page contact par exemple.
    merci d’avance

    1. Julio Potier (BoiteAWeb)

      Bonjour cette question me semble hors sujet même si on parle des meta fields.
      Je t’invite à poser ta question ici : http://www.geekpress.fr/questions/
      Merci !

      1. Baker

        Merci Julio grâce à GeekPress, j’ai pu trouver un début de solution et après je me suis débrouillé avec ce tuto, donc voici le code:
        http://pastebin.com/6Xe7SZu0

        si quelqu’un a une meilleur solution je suis preneur 🙂
        Merci.

  10. Lakitu05

    Aurélien, moi j’utilise Simple Press mais même avec ton tuto je ne comprends pas comment insérer les champs personnalisés dans l’article.

    1. Aurélien Denis auteur de l’article

      Hum je ne comprends pas le rapport avec Simple Press ?

  11. GeekPress

    ton GET n’est pas la bonne méthode, si on est sur un type post et bien la variable n’existe pas car la page sera post.php et non pas post.php?post_type=post ^^

    Utilise plutôt :
    global $typenow;
    if( $typenow == ‘page’ )

    1. Aurélien Denis auteur de l’article

      Ah ! Merci de l’info ! 😎

  12. M8ke

    Bonjour,
    déjà merci pour ce bout de code fort utile. J’ai cependant un léger problème…. Dès lors que l’enlève le’!’ à la ligne : $_GET[‘post_type’] != ‘page’
    ou que je remplace par post, page ou le slug de mon custom post type, mes champs persos créés apparaissent dans les pages d’édition des post, page et custom post type, et leur affichage ne se limite alors plus au champ (post, page ou slug de mon custom post type) définit à $_GET[‘post_type’] != ‘page’

    Une idée quelqu’un? Merci.

  13. Marc

    Oui, c’est vrai que je suis tenté de passer sur OVH ou autre mais même si mon thème a été mis à jour, j’ai fait quelques modifs que je veux garder mais sans être sûr de savoir les refaire sur la nouvelle version de TheMorningAfter… Alors tant que ce blog tient, j’y touche pas trop. Bon par contre, j’ai perdu la “fonction” Curl récemment et je suis bien ennuyé… Ca va peut-être me pousser à changer plus vite que prévu.

    Sinon, c’est quand même la perte de référencement qui me bloque le plus… J’ai bossé plusieurs années, je veux pas tour perdre…

  14. Marc

    Merci! En fait, ma version de WordPress est trop ancienne pour l’utiliser… Je sais, je devrais le mettre à jour mais mon thème risque de ne plus marcher et sur Free, j’ai un peu peur que la 3.3 ne tourne pas très bien…

    Je vais peut-être upgrader en 2.9 quand même 😉

    1. Julio Potier

      Wow, un WordPress 2.7 … sinon chez OVH pour 29 euros TTC par année, tu as un hébergement digne de ce nom.

      1. Marc

        Oui, je sais bien! Mais chez Free c’est visiblement compliqué d’en partir sans perdre tout mon référencement… Les redirections 301 ne marchent pas il me semble…

        1. britain

          chez Free,on peut être sous WP3.1.4 au maximum,déjà plus je ne fais pas partie des personnes qui proposent OVH comme hébergeur,trop souvent un message d’erreur comme quoi le site ne peut pas se connecter à la base de donnée,j’y suis depuis plus de 8 ans,une vieille offre 300gp,juste la fainéantise de changer d’hébergeur,j’ai testé 1&1 plus stable,pas de souci,rien à redire.
          Chez Free on peut mettre un page pour indiquer la nouvelle adresse.

          1. Aurélien Denis auteur de l’article

            Laissez tomber OVH !!! 1&1 plus stable mais limité en performances.

            Un bon mutualisé : Mavenhosting pour 60€ l’année. Plus cher mais puissant (bande passante illimitée, 75 Go d’espace disque, panneau d’administration cPanel, multi-domaines, etc.). 😉

          2. Julio Potier

            Euh, chez OVh depuis plus de 3 ans, jamais eu de probleme o_O
            Et entre une free.fr et un OVH perso à 28€ … ya pas photo quand meme !
            Quand on arrive a vivre avec un free.fr, on est tres content d’avoir un OVH perso non ?
            Passez à 60€ l’année c’est trop quand on vient de free.fr.
            OVh c’est pas 75go mais 250go. BP non limitée, et jamais de message d’erreur ici… #pebkac

          3. britain

            bien sur de Free à OVH,il n’y a pas photos.
            vous n’êtes pas tombé sur le moment de la journée où on a droit à ce genre de message chez OVH,coup de chance,mais c’est un message qui arrive souvent,je vois sur le forum de wordpress-fr.net pas mal de personne viennent poser en panique à cause de ce message.
            OVH n’est pas stable,tu dis 250Go quel offre? Parce que ‘offre perso c’est 25Go

          4. GeekPress

            1&1 … Pour un mutualisé il n’y a pas pire !!

            Obligé de passer par le manager pour accéder à phpMyAdmin.

            Et concernant le ftp, la fonction snap n’est pas disponible. En gros,le site plante et si on n’a pas de backup et bin dans le …

            1&1, j’avais que des problèmes, OVH tout est nickel =D

  15. Marc

    Merci pour l’article! Juste une petite question: comment fait pour remplir automatiquement les champs personnalisés? Par exemple dans mon thème, un champ personnalisé existe pour placer une miniature au dessus de l’extrait mais je dois uploader une image à chaque fois et mettre son nom dans la “valeur”. Est-ce possible de déterminer cette valeur automatiquement, en fonction de la catégorie par exemple, ou d’un tag? Comme ça plus besoin de remplir ce champs à chaque fois que je rédige un article…

    Je sais pas si je suis clair…

    Merci d’avance 😉

  16. vallsymachinant

    Au risque d’avoir l’air BEGINEER – Dans quel cas préférer les Champs personnalisés aux Custom Meta ?

    1. Aurélien Denis auteur de l’article

      Qu’entends-tu par custom meta ? Les métaboxes ? Ce ne sont que des champs personnalisés en réalité… 🙂

      1. vallsymachinant

        Ah et bien voila pourquoi je ne comprenais pas la différence :p Merci 😀

  17. Julio Potier

    Toujours utile ça !
    A noter que le code se déclenche aussi lors de l’insertion d’une révision et donc d’un autosave.

    1. Cybercraft

      Très pratique comme infos 🙂

      Merci Aurélien !

      1. Aurélien Denis auteur de l’article

        Merci à vous deux ! 😎

Laisser un commentaire