Ce face register_taxonomy
O taxonomie grupează conținutul: Categoriile și Etichetele sunt taxonomiile implicite ale articolelor. Cu register_taxonomy() creezi una proprie (de exemplu oras, cu termenii Iași și Cluj) și o legi de unul sau mai multe tipuri de conținut prin $object_type.
Cu hierarchical = true taxonomia se comportă ca categoriile (termeni cu părinți, bife în editor); cu false (implicit) se comportă ca etichetele. Înregistrarea se face pe init; pentru a apărea în editorul de blocuri ai nevoie de show_in_rest = true.
Cheia are maximum 32 de caractere (litere mici, cifre, -, _) și nu trebuie să fie un termen rezervat de WordPress (de exemplu author, year, type). Ca la tipurile de conținut, după ce adaugi taxonomia regenerezi regulile de adrese.
Parametri
| Parametru | Descriere |
|---|---|
$taxonomy |
Cheia taxonomiei: maximum 32 de caractere, litere mici, cifre, - și _. |
$object_type |
Tipul (sau tabloul de tipuri) de conținut legat, de exemplu 'produs' sau array( 'post', 'produs' ). |
labels |
Etichetele din administrare (name, singular_name…). |
hierarchical |
true ca la categorii, false (implicit) ca la etichete. |
show_admin_column |
Adaugă o coloană cu termenii în lista din administrare. Implicit false. |
show_in_rest |
Include taxonomia în API-ul REST și în editorul de blocuri. |
rewrite |
false sau un tablou cu slug, with_front, hierarchical. Implicit slug-ul este cheia. |
default_term |
Termen implicit al taxonomiei (din WordPress 5.5). |
Ce returnează
Obiectul WP_Taxonomy (din WordPress 5.4) sau WP_Error la eșec.
Exemple
Exemplul 1: Taxonomia „Oraș” pentru produse
Ierarhică, cu coloană în listă și disponibilă în editorul de blocuri. Arhiva unui termen: https://exemplu.ro/oras/iasi/.
<?php
add_action( 'init', 'dex_inregistreaza_oras' );
function dex_inregistreaza_oras() {
register_taxonomy( 'oras', array( 'produs' ), array(
'labels' => array(
'name' => 'Orașe',
'singular_name' => 'Oraș',
),
'hierarchical' => true,
'show_admin_column' => true,
'show_in_rest' => true,
'rewrite' => array( 'slug' => 'oras' ),
) );
}
Exemplul 2: Produsele dintr-un oraș, cu tax_query
field = 'slug' înseamnă că terms conține slug-uri, nu ID-uri.
<?php
$din_iasi = get_posts( array(
'post_type' => 'produs',
'tax_query' => array(
array(
'taxonomy' => 'oras',
'field' => 'slug',
'terms' => 'iasi',
),
),
) );
foreach ( $din_iasi as $p ) {
echo '<li>' . esc_html( get_the_title( $p ) ) . '</li>';
}
Ce afișează pagina
<li>Cană ceramică</li><li>Cafea boabe 250 g</li>
Greșeli frecvente
- Alegi o cheie rezervată (
author,year,type): WordPress poate răspunde cu 404 fără altă explicație. Folosește un nume propriu, eventual cu prefix. - Înregistrezi taxonomia înainte de
init(direct înfunctions.php, în afara unui hook). - Taxonomia nu apare în panoul din editorul de blocuri: lipsește
'show_in_rest' => true. - Arhiva termenului dă 404 până regenerezi regulile de adrese.
Comenzi înrudite
register_post_type: Înregistrează un tip de conținut personalizat (produse, evenimente, rețete), cu meniu propriu în administrare.init: Acțiunea care rulează după ce WordPress s-a încărcat, înainte de trimiterea antetelor; locul pentru tipuri de conținut, taxonomii și formulare.WP_Query: Clasa care interoghează articole, pagini și tipuri personalizate după criterii: tip, categorie, câmpuri, ordine, paginare.wp rewrite flush: Regenerează regulile de rescriere a adreselor (permalinks), de exemplu după înregistrarea unui tip de conținut nou.