web-dev-qa-db-fra.com

Taxonomie, termes et fichiers modèles

J'ai post type 'produit' et taxonomie hiérarchique 'types' attachés. Dans cette taxonomie, j'ai des termes: 'nettoyage à sec', 'laveuse', etc. Avec plusieurs sous termes sur chaque terme.

Dans ma situation, j'ai besoin d'afficher, par exemple:

  1. http://example.com/types/washer -> afficher tous les termes secondaires dessus
  2. http://example.com/types/washer/ {subterm} -> afficher tous les messages sur celui-ci

Mes questions sont:

  1. Comment puis-je obtenir l'URL permalien des termes parents? J'ai essayé l'URL ci-dessus, mais le résultat est 404.
  2. Comment les fichiers modèles fonctionnent-ils pour ce genre de problème?
    1. taxonomy-types-washer.php est-il suffisant pour le cas n ° 1? ou dois-je créer taxonomy-types.php et créer la logique là-bas?
    2. dans mon esprit, après avoir scanné template hierarchy , je pourrais avoir besoin de taxonomy-types-{term_parent}.php pour lister tous les sous-termes et de taxonomy-types.php pour lister tous les produits en sous-termes.
    3. finalement, pour afficher chaque produit, je devrai créer single-product.php
  3. Sur un problème légèrement sans rapport. Je trouve que archive-{posttype}.php ne fonctionne pas quand je n'ai aucun post dessus. Existe-t-il une solution à ça? (devrais-je créer une question différente, ou rester avec celle-ci} _)?

UPDATE

J'ai vérifié mes options rewrite_rules et il ne répertorie pas du tout [types]. Je ne sais pas pourquoi. Pour le tester, je change mon slug en product-types, rince le permalien et il énumère ceci:

[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]

Donc je suppose que c'est enregistré maintenant. J'essaie de charger l'URL product-types/washer il passe à 404. J'essaie de charger l'URL index.php?types=washer. Ça aussi, ça va 404. Pour le moment, j'ai ces fichiers:

  • taxonomy-types-washer.php
  • taxonomy-types.php

Donc, je ne sais pas ce qui ne va pas avec celui-ci :(.

UPDATE # 2

Je trouve le problème. C'est parce que j'ai raté 'rewrite'=>array('hierarchical'=>true)

Voici le nouveau 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]
7
ariefbayu

Ces types d’URL sont supportés depuis WP 3.1:

register_taxonomy( 'types', 'post', array(
  'hierarchical' => true,
  'rewrite' => array( 'hierarchical' => true ),
  ...
);

N'oubliez pas de vider les règles de réécriture après avoir effectué le changement.

Le modèle que vous utiliseriez pour les termes parents et enfants est taxonomy-types.php:

$current_term = get_queried_object();

if ( 0 == $current_term->parent ) {
  // it's a parent term; display it's child terms using wp_list_categories() etc.
} else {
  // it's a child term; display the posts using The Loop etc.
}
6
scribu