Taxonomii, Termeni și Fișiere de Șablon în WordPress

10 apr. 2011, 22:57:22
Vizualizări: 4.02K
Voturi: 7

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:

  1. http://example.com/types/washer -> să afișez toți sub-termenii
  2. http://example.com/types/washer/{subterm} -> să afișez toate postările

Întrebările mele sunt:

  1. Cum obțin URL-ul permalink pentru termenii părinte? Am încercat URL-ul de mai sus, dar rezultă în 404.
  2. Cum funcționează fișierele de șablon pentru această problemă?
    1. este suficient taxonomy-types-washer.php pentru cazul #1? sau ar trebui să creez taxonomy-types.php și să implementez logica acolo?
    2. după analizarea ierarhiei de șabloane, cred că am nevoie de taxonomy-types-{term_parent}.php pentru a lista toți sub-termenii și taxonomy-types.php pentru a lista toate produsele din sub-termeni.
    3. în final, pentru a afișa fiecare produs, va trebui să creez single-product.php
  3. 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]
3
Comentarii

Știu că acest lucru se poate face http://wordpress.stackexchange.com/questions/5308/custom-post-types-taxonomies-and-permalinks/5313#5313 dar pentru taxonomii "non-hierarhice".

Bainternet Bainternet
11 apr. 2011 02:09:29

Ar trebui să creezi o nouă întrebare pentru punctul 3.

scribu scribu
11 apr. 2011 03:09:45

@scribu, voi crea acea întrebare diseară, când mă voi întoarce acasă.

ariefbayu ariefbayu
11 apr. 2011 12:14:13
Toate răspunsurile la întrebare 1
0

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.
}
11 apr. 2011 03:09:10