Le blog.

Ajouter des champs custom fields à une taxonomie avec Tax Meta Class.

Notre dernier tutoriel explique comment regrouper des articles de blog dans une taxonomie Série. Cette fois, personnalisons nos taxonomies en leur ajoutant des nouveaux champs (custom fields) et étudions l’utilisation de la classe-helper Tax Meta Class.


La première partie de cette série se concentre sur notre nouvelle taxonomie Série créée avec la librairie Cuztom, puis sur la création d’un shortcode permettant d’afficher les articles de la série en cours de lecture. A ce stade, les éléments de notre taxonomie WordPress ne possèdent que peu d’informations : titre et description sont les seules données à afficher.

Mais saviez-vous qu’il est possible de créer des nouveaux champs pour étendre les structures des taxonomies WordPress ? L’helper Tax Meta Class s’avère bien pratique pour ajouter de nombreux types de champs : image, texte, date, checkbox, select, radio… et bien plus encore !

Création d’une metabox et ajout de custom fields

require_once(get_template_directory() . '/inc/Tax-meta-class/Tax-meta-class.php');

if (is_admin()){
  $config = array(
    'id' => 'serie_metabox',
    'title' => 'Information sur cette série',
    'pages' => array('serie'),
    'context' => 'normal',
    'fields' => array(),
    'local_images' => true,
    'use_with_theme' => get_template_directory_uri() . '/inc/Tax-meta-class'
  );

  $serie_metabox = new Tax_Meta_Class($config);

  $serie_metabox->addText(
    'difficulty',
    array(
      'name' => 'Difficulté'
    )
  );

  $serie_metabox->addImage(
    'image',
    array(
      'name' => 'Image'
    )
  );

  $serie_metabox->Finish();
}

Dans un premier temps, on définit une array de configuration de notre metabox qui contiendra nos nouveaux champs. Ensuite, on instancie la classe Tax_Meta_Class et on utilise les méthodes à disposition (lisez class-usage-demo.php pour une liste des champs disponibles) pour ajouter des champs à notre metabox : addText ajoute un champs custom field de texte, addImage ajoute la possibilité d’assigner une image à notre taxonomie.

Enfin, on termine avec Finish pour initialiser le tout.

Je ne vois aucune metabox dans laquelle mes champs sont ajoutés, pourquoi définir un id et un title ? D’après la documentation de l’auteur de cette classe, l’id et titre de la metabox seront utilisés dans une prochaine mise à jour afin d’afficher les metabox en question… D’où l’actuelle utilisation !

Affichage des données des custom fields d’un terme de taxonomie

$serie_image = get_tax_meta($serie->term_id, 'image');

La syntaxe ressemble beaucoup à get_post_meta : on passe tout d’abord l’ID du terme de notre taxonomie, puis l’ID du champs (meta) de notre taxonomie. Rien de compliqué ! Notez qu’un champ d’image renvoie une array associativé avec l’ID et l’URL de l’image.

En couplant l’utilisation de la librairie Cuztom avec cette classe helper Tax Meta Class, nous pouvons désormais transformer WordPress en un vrai CMS qui va au delà du simple blog. Nos types de contenus personnalisés se voient recevoir des champs uniques pour stocker des données spécifiques. Des custom taxonomies sont ajoutées sans souci et associées à n’importe quel type de contenu. Enfin, des champs custom fields sont également associés à ces taxonomies.

Avec une bonne connaissance de ces 2 librairies, vous pouvez maintenant développer des contenus proprement nommés et catégorisés aux données complexes, avec une interface qui se fond à l’interface WordPress pour que vos clients profitent de ces fonctionnalités en toute simplicité !

28 commentaires ont été rédigés, ajoutez le votre.

  1. Rétrolien: Ajouter de champs champs custom fields à une taxonomie WordPress | WordPress : Tutos, Astuces & Plugins | Scoop.it

  2. Thomas Répondre

    Merci pour ce tuto ça fait un petit moment que je cherchais à ajouter une image à mes taxo je vais essayer ça tout de suite

    • Pierre Répondre

      Content d’avoir été utile ;)

      • Thomas Répondre

        Merci ca marche nickel par contre comment récupérer l’image dans un format bien défini
        jai créé des post-thumbnails
        add_image_size( ‘titre’, 668, 196, true );

        comment ajouter avec le format titre

  3. Thomas Répondre

    est ce qu’il possible de récupérer les dimensions du style
    if ( has_post_thumbnail() ) { // dans la boucle
    $imageData = wp_get_attachment_image_src(get_post_thumbnail_id ( $post_ID ),titre);
    echo  »

  4. Thomas Répondre

    Je poste mon code pour ceux que ca pourrait intéresser sur un fichier taxonomy-« nom de votre taxo »

    $term = get_term_by(‘slug’,get_query_var(‘term’),get_query_var(‘taxonomy’));?>
    term_id, ‘chantier_img’);
    $id = $chantier_metabox[‘id’];
    $imageData = wp_get_attachment_image_src($id,titre);
    echo  »

    « ;
    ?>

  5. Thomas Répondre

    Salut,
    As tu essayé l’upload de plusieurs images

    $repeater_fields[] = $my_meta->addImage($prefix.’image_field_id’,array(‘name’=> __(‘My Image ‘,’tax-meta’)),true);
    $my_meta->addRepeaterBlock($prefix.’re_’,array(‘inline’ => true, ‘name’ => __(‘This is a Repeater Block’,’tax-meta’),’fields’ => $repeater_fields));
    moi ce me retourne cet erreur
    Warning: Illegal offset type in C:wampwww…….librairieTax-meta-classTax-meta-class.php on line 537
    Ca uload bien mais quand j’enregistre quand je retourne dans ma taxo il me retourne l’erreur et n’affiche pas les images

    • Pierre Répondre

      Salut Thomas,
      Hélas je n’ai jamais utilisé avec plusieurs images.
      Je publierai bientôt un nouveau tuto-vidéo sur la création de custom fields d’une taxonomie avec une alternative à Tax Meta Class (https://github.com/Gizburdt/Wordpress-Cuztom-Helper) et j’essaierai d’aborder ton problème à travers cette librairie.

  6. Thomas Répondre

    J’ai réessayé avec un wordpress en local sans plugin
    rien à faire ça ajoute bien mes images dans la base de donnée car sur ma page de taxonomy-« ma taxo » j’arrive à les afficher par contre toujours cette erreur dans l’admin quand je veux afficher ma taxo
    Warning: Illegal offset type in C:wampwww…….librairieTax-meta-classTax-meta-class.php on line 537
    J’ai bien l’icone supprimer qui fonctionne mais à la place de l’image j’ai un tableau d’erreur php

    J’attends avec impatience ta nouvelle vidéo

  7. Thomas Répondre

    Enfin trouvé l’erreur si ca peut servir
    il faut remplacer ce code à la ligne 537 dans le fichier tax-meta-class.php
    $mmm = ($me[$field])? $me[$field[‘fields’][0][‘id’]]: «  »;
    echo  ».$mmm. »;

    par

    $mmm = isset($me[$field[‘fields’][0][‘id’]])? $me[$field[‘fields’][0][‘id’]]: «  »;
    echo  »;

  8. Louis Répondre

    Bonjour,
    Tout d’abord je vous remercie pour ce tuto ;)

    J’ai un petite poblème je n’arrive pas à afficher l’image et le texte sur ma custom taxonomy :

    term_id, ‘photo’); $auteur_photo_src = $auteur_photo[‘src’]; echo  »; ?>

    term_id, ‘date’); ?>

    A l’affichage :

    • Pierre Répondre

      Bonjour Louis !

      Problème d’affichage de votre code dans le commentaire, pourriez-vous me transmettre votre code et problème via http://pastebin.com/ svp ?

      Merci !

      • Louis Répondre

        Bonjour Pierre,

        Je vous remercie d’avoir répondu si vite à ma question
        Lien : http://pastebin.com/vvgxxCfA

        Ps : je crois mettre tromper de bouton.

        Cordialement

        • Pierre Répondre

          Bonjour Louis,
          Que donne un print_r() sur $author_photo ?

      • Louis Répondre

        Bonjour Pierre,

        Avec le code :
        term_id, ‘photo’); print_r($auteur_photo); ?>

        Rien ne s’affiche malheureusement.

        • Pierre Saïkali Répondre

          Bonjour Louis,
          Il faut remonter en amont alors, est-ce que term_id est défini ?

  9. Louis Répondre

    Bonjour Pierre,

    Je vous remercie d’avoir répondu si vite à ma question
    Lien : http://pastebin.com/vvgxxCfA

    Ps : lors de l’affichage voici ce qui apparaît sur la console de chrome :
    Image :

    Pour la date rien ne s’affiche.

    Cordialement

  10. Cédric Répondre

    Bonjour Pierre
    Je ne sais pas si je m’y suis bien pris mais il semble que l’upload d’image de cette library ne soit pas opérationnelle ? Est-ce moi ?

    • Pierre Répondre

      Bonjour Cédric,
      Pour être totalement honnête je n’ai plus utilisé cette librairie depuis cet article.
      Depuis, l’helper Cuztom (dont je parle dans 2/3 autres tutos) a étendu ses metabox et custom fields aux taxonomies, cf https://github.com/Gizburdt/Wordpress-Cuztom-Helper/wiki/Term-Meta
      Donc j’ai radié l’utilisation de Tax Meta Class au profit d’une seule et unique pour mes CPT et custom fields : Cuztom.

      • Louis Répondre

        Je vais donc laisser tomber la librairie présentée dans l’article.
        Petite question : est-il possible de créer les meta-fields avec cette librairie sans modifier les fichiers de création des custom type post et meta-boxe ?

        • Pierre Saïkali Répondre

          Tu veux dire les CPT/metaboxes créés avec une AUTRE librairie que Cuztom ?
          Oui bien sûr, via « new Cuztom_Term_Meta()…. ». C’est en fait exactement ce que fais la méthode « $taxonomie->add_term_meta() » dans le wiki ci-dessus.

          Je vais essayer de repdrendre un peu l’écriture du blog : ça pourrait être le prochain article (custom fields de taxonomies via Cuztom).

  11. fabien Répondre

    Bonjour Pierre,

    D’abord merci pour ce tutoriel très complet.

    Je souhaite ajouter un champ d’upload d’image pour une custom taxonomy que j’ai déjà créée. J’ai suivi les différentes étapes de ton tutoriel et je bloque sur le chemin d’accès aux fichiers CSS et JS.

    Comme toi j’avais l’erreur des fichiers introuvables mais lorsque je remplace get_template_directory() par get_template_directory_url() j’ai une page blanche au chargement de mon admin (et ce quelque soit la page de l’admin). Voici le code http://pastebin.com/ecqPKs1w que j’ai édité dans mon fichier functions.php . Aurais-tu une idée de l’erreur (certainement bête) que j’ai pu faire ?

    Merci par avance pour ta réponse,
    Fabien

    • Pierre Saïkali Répondre

      Bonjour Fabien,

      Essayez avec get_template_directory_uri() (et non url). Si ça ne marche toujours pas, essayez également avec :
      require_once locate_template(‘/inc/Tax-meta-class/Tax-meta-class.php’);

      A votre dispo !

  12. Maral Sabbagh Répondre

    Le tutoriel montre comment l’intégrer dans un thème mais pas dans un plugin. Le champs upload image dans mon cas ne fonctionne pas. Malheureusement j’ai essayé de modifier le chemin, mettre sur true, rien ne fonctionne. . Comment faire pour que le bouton upload image soit fonctionnel pour le plugin ?? Merci

Laisser un commentaire