Aller au contenu principal
Version: Next

Taxonomies

Les taxonomies dans WordPress permettent d'organiser vos types de contenu personnalisés. Cette documentation explique comment créer et gérer des taxonomies de manière efficace.

Création d'une taxonomie

Pour créer une taxonomie, utilisez la méthode addTaxonomy dans votre classe de post type. Il est recommandé de définir chaque taxonomie dans une méthode séparée pour une meilleure organisation.

app/PostTypes/Recipe.php
public function setupRecipeCategories()
{
    $this->addTaxonomy('recipe_category', 'Catégories de recettes')
        ->isFemale()
        ->setLabels([
            'plural' => 'catégories',
            'singular' => 'catégorie',
        ])
        ->register();
}

Paramètres de la taxonomie

Identifiants

  • slug string - Identifiant unique de la taxonomie (en minuscules, sans espaces ni caractères spéciaux)
  • menuName string - Nom affiché dans l'administration

Personnalisation

Genre des libellés

  • ->isFemale() - Pour les noms féminins (par défaut)
  • ->isMale() - Pour les noms masculins

Personnalisation des libellés

->setLabels([
    'plural' => 'ingrédients',    // Nom au pluriel
    'singular' => 'ingrédient',   // Nom au singulier
])

Utilisation des taxonomies

Récupération des termes

Tous les termes d'une taxonomie

{% for term in post.get_terms('recipe_category') %}
    <span class="tag">{{ term.name }}</span>
{% endfor %}

Champs personnalisés sur les termes

Depuis 26.0.9.6, la façade Taxonomy intègre le trait Fields. Vous pouvez donc attacher des champs Carbon Fields aux termes d'une taxonomie, exactement comme vous le feriez sur un post type.

Déclaration des champs

Utilisez addContainerFields() sur l'instance de taxonomie, puis appelez registerTaxonomyContainers() dans un hook carbon_fields_register_fields.

app/PostTypes/Recipe.php
use Carbon_Fields\Field;

public function setupRecipeCategories()
{
    $taxonomy = $this->addTaxonomy('recipe_category', 'Catégories de recettes')
        ->isFemale()
        ->setLabels([
            'plural' => 'catégories',
            'singular' => 'catégorie',
        ])
        ->register();

    $taxonomy->addContainerFields('Informations', [
        Field::make('image', 'recipe_category_image', 'Image de la catégorie'),
        Field::make('textarea', 'recipe_category_description', 'Description courte'),
    ]);

    add_action('carbon_fields_register_fields', [$taxonomy, 'registerTaxonomyContainers']);
}

Récupération des valeurs

Les valeurs sont stockées en tant que term meta. Utilisez la fonction WordPress get_term_meta() pour les lire, ou accédez-y depuis un template Twig.

{% for term in post.get_terms('recipe_category') %}
    <div class="category">
        <img src="{{ fn('get_term_meta', term.term_id, '_recipe_category_image', true) }}" alt="{{ term.name }}">
        <p>{{ fn('get_term_meta', term.term_id, '_recipe_category_description', true) }}</p>
    </div>
{% endfor %}
remarque

Le nom de la meta est automatiquement préfixé par un underscore _ par Carbon Fields. Pensez-y lors de vos appels à get_term_meta().

Bonnes pratiques

  • Nommage : Utilisez des préfixes pour éviter les conflits (ex: recipe_ pour une taxonomie de recettes)

Exemple complet

Rappel

Les méthodes public dans une classe de post type sont appelées automatiquement lors de l'initialisation du post type. Il n'est donc pas nécessaire de les appeler manuellement.

class Recipe extends PostType
{
    public function __construct()
    {
        // Code du constructeur...
    }

    public function setupRecipeCategories()
    {
        $this->addTaxonomy('recipe_category', 'Catégories de recettes')
            ->isFemale()
            ->setLabels([
                'plural' => 'catégories',
                'singular' => 'catégorie',
            ])
            ->register();
    }

    public function setupRecipeTags()
    {
        $this->addTaxonomy('recipe_tag', 'Étiquettes')
            ->isFemale()
            ->register();
    }
}