Taxonomii, Termeni și Fișiere de Șablon în WordPress
Am un tip de post 'product' și o taxonomie ierarhică 'types' atașată la acesta. În această taxonomie, am termeni precum 'dry-clean', 'washer', etc., cu mai mulți sub-termeni pentru fiecare termen.
În situația mea, trebuie să afișez, de exemplu:
- http://example.com/types/washer -> să afișez toți sub-termenii
- http://example.com/types/washer/{subterm} -> să afișez toate postările
Întrebările mele sunt:
- Cum obțin URL-ul permalink pentru termenii părinte? Am încercat URL-ul de mai sus, dar rezultă în 404.
- Cum funcționează fișierele de șablon pentru această problemă?
- este suficient
taxonomy-types-washer.php
pentru cazul #1? sau ar trebui să creeztaxonomy-types.php
și să implementez logica acolo? - după analizarea ierarhiei de șabloane, cred că am nevoie de
taxonomy-types-{term_parent}.php
pentru a lista toți sub-termenii șitaxonomy-types.php
pentru a lista toate produsele din sub-termeni. - în final, pentru a afișa fiecare produs, va trebui să creez
single-product.php
- este suficient
- O problemă ușor diferită: am observat că
archive-{posttype}.php
nu funcționează când nu am nicio postare. Există vreo soluție pentru asta? (ar trebui să creez o întrebare separată sau să rămân la aceasta?)
ACTUALIZARE
Am verificat opțiunile rewrite_rules
și nu listează deloc [types]. Nu știu de ce. Pentru test, am schimbat slug-ul în product-types
, am resetat permalink-urile și acum apare asta:
[product-types/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/([^/]+)/page/?([0-9]{1,})/?$] => index.php?types=$matches[1]&paged=$matches[2]
[product-types/([^/]+)/?$] => index.php?types=$matches[1]
Deci cred că acum este înregistrat. Am încercat să accesez URL-ul product-types/washer
și merge la 404. Am încercat și index.php?types=washer
, dar tot la 404. Momentan am aceste fișiere:
- taxonomy-types-washer.php
- taxonomy-types.php
Nu înțeleg ce este greșit :(
ACTUALIZARE #2
Am găsit problema. Am omis 'rewrite'=>array('hierarchical'=>true)
Iată noile rewrite_rules
:
[product-types/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/(.+?)/page/?([0-9]{1,})/?$] => index.php?types=$matches[1]&paged=$matches[2]
[product-types/(.+?)/?$] => index.php?types=$matches[1]

Aceste tipuri de URL-uri sunt suportate începând cu WP 3.1:
register_taxonomy( 'types', 'post', array(
'hierarchical' => true,
'rewrite' => array( 'hierarchical' => true ),
...
);
Nu uitați să resetați regulile de rescriere după ce ați efectuat modificarea.
Șablonul pe care l-ați folosi atât pentru termenii părinte cât și pentru cei copil este taxonomy-types.php:
$current_term = get_queried_object();
if ( 0 == $current_term->parent ) {
// este un termen părinte; afișați termenii copil folosind wp_list_categories() etc.
} else {
// este un termen copil; afișați postările folosind The Loop etc.
}
