Custom Taxonomies - własne kategorie WordPress
Custom Taxonomies to własne systemy klasyfikacji w WordPress. Tak jak masz Categories i Tags dla postów, możesz stworzyć Umiejętności dla Zespołu czy Branże dla Portfolio. Uzupełnienie Custom Post Types.
Krótka odpowiedź
Taxonomy vs Category vs Tag
Taxonomy:
- System klasyfikacji
- Category i Tag to wbudowane taxonomies
- Możesz tworzyć własne
Hierarchiczna (jak Category):
- Parent-child struktura
- Checkboxy w edytorze
- Przykład: Branże → IT → Frontend
Płaska (jak Tag):
- Bez hierarchii
- Pole tekstowe z autocomplete
- Przykład: Umiejętności (PHP, JavaScript, CSS)
Przykłady użycia:
- Portfolio: Branża, Technologia
- Zespół: Dział, Lokalizacja
- Oferty pracy: Stanowisko, Poziom
Rejestracja Custom Taxonomy
Hierarchiczna (jak kategorie):
```php
add_action('init', function() {
register_taxonomy('branza', ['portfolio'], [
'labels' => [
'name' => 'Branże',
'singular_name' => 'Branża',
'add_new_item' => 'Dodaj branżę',
],
'hierarchical' => true,
'public' => true,
'rewrite' => ['slug' => 'branza'],
'show_in_rest' => true,
'show_admin_column' => true,
]);
});
```
Płaska (jak tagi):
```php
register_taxonomy('technologia', ['portfolio'], [
'labels' => ['name' => 'Technologie'],
'hierarchical' => false, // płaska
'public' => true,
'show_in_rest' => true,
]);
```
CPT UI - tworzenie taxonomy
Przez wtyczkę:
1. CPT UI → Add/Edit Taxonomies
2. Taxonomy Slug (np. branza)
3. Plural Label (Branże)
4. Singular Label (Branża)
5. Attach to Post Type (portfolio)
6. Hierarchical: Yes/No
7. Add Taxonomy
Przypisanie do wielu CPT:
- W polu "Attach to Post Type"
- Zaznacz wiele typów
- Np. branza dla portfolio i case-study
Po utworzeniu:
- Pojawi się w menu pod CPT
- Możesz dodawać terms
- Przypisywać do wpisów
Wyświetlanie i filtrowanie
Lista terms w szablonie:
```php
$terms = get_terms(['taxonomy' => 'branza']);
foreach ($terms as $term) {
echo '';
echo $term->name . '';
}
```
Terms przypisane do posta:
```php
$branże = get_the_terms(get_the_ID(), 'branza');
if ($branże) {
foreach ($branże as $branza) {
echo $branza->name;
}
}
```
Archiwum taxonomy:
- URL: /branza/it/
- Szablon: taxonomy-branza.php
WP_Query z taxonomy:
```php
$query = new WP_Query([
'post_type' => 'portfolio',
'tax_query' => [
[
'taxonomy' => 'branza',
'field' => 'slug',
'terms' => 'it',
]
]
]);
```