Skip to content

#[AsTaxonomy]

Register a class as a custom WordPress taxonomy.

Signature

php
#[Attribute(Attribute::TARGET_CLASS)]
final readonly class AsTaxonomy
{
    public function __construct(
        public string $name,
        public array $postTypes = [],
        public ?string $singular = null,
        public ?string $plural = null,
        public bool $public = true,
        public bool $hierarchical = false,
        public bool $showInRest = true,
        public bool $showAdminColumn = true,
        public ?string $rewriteSlug = null,
    ) {}
}

Parameters

ParameterTypeDefaultDescription
namestringTaxonomy slug (required)
postTypesstring[][]Associated post type slugs
singular?stringnullSingular label
plural?stringnullPlural label
publicbooltrueWhether publicly visible
hierarchicalboolfalseHierarchical like categories
showInRestbooltrueEnable REST API and Gutenberg
showAdminColumnbooltrueShow column in admin post list
rewriteSlug?stringnullCustom URL slug

Usage

Basic Taxonomy

php
<?php

namespace App\Models;

use Studiometa\Foehn\Attributes\AsTaxonomy;

#[AsTaxonomy(
    name: 'product_category',
    postTypes: ['product'],
    singular: 'Category',
    plural: 'Categories',
    hierarchical: true,
)]
final class ProductCategory {}

Tag-style Taxonomy

php
#[AsTaxonomy(
    name: 'product_tag',
    postTypes: ['product'],
    singular: 'Tag',
    plural: 'Tags',
    hierarchical: false,
)]
final class ProductTag {}

Shared Taxonomy

php
#[AsTaxonomy(
    name: 'location',
    postTypes: ['event', 'team', 'office'],
    singular: 'Location',
    plural: 'Locations',
)]
final class Location {}

With Advanced Configuration

Implement ConfiguresTaxonomy for full control:

php
<?php

namespace App\Models;

use Studiometa\Foehn\Attributes\AsTaxonomy;
use Studiometa\Foehn\Contracts\ConfiguresTaxonomy;

#[AsTaxonomy(
    name: 'skill',
    postTypes: ['team'],
    singular: 'Skill',
    plural: 'Skills',
)]
final class Skill implements ConfiguresTaxonomy
{
    public static function taxonomyArgs(array $args): array
    {
        $args['capabilities'] = [
            'manage_terms' => 'manage_skills',
            'edit_terms' => 'edit_skills',
            'delete_terms' => 'delete_skills',
            'assign_terms' => 'assign_skills',
        ];

        return $args;
    }
}

Released under the MIT License.