Taxonomías, Términos y Archivos de Plantilla en WordPress
Tengo un tipo de publicación 'product' y una taxonomía jerárquica 'types' asociada a ella. En esta taxonomía, tengo términos como 'dry-clean', 'washer', etc., con varios sub-términos en cada uno.
En mi situación, necesito mostrar:
- http://example.com/types/washer → mostrar todos los sub-términos
- http://example.com/types/washer/{subterm} → mostrar todas las publicaciones
Mis preguntas son:
- ¿Cómo obtengo el permalink URL para los términos padres? Intenté con la URL anterior, pero resulta en 404.
- ¿Cómo funcionan los archivos de plantilla para este tipo de problema?
- ¿Es suficiente
taxonomy-types-washer.php
para el caso #1? ¿O debería creartaxonomy-types.php
y poner la lógica allí? - Según la jerarquía de plantillas, podría necesitar
taxonomy-types-{term_parent}.php
para listar sub-términos ytaxonomy-types.php
para listar productos en sub-términos. - Finalmente, para mostrar cada producto, necesitaré
single-product.php
.
- ¿Es suficiente
- Problema no relacionado:
archive-{posttype}.php
no funciona cuando no hay publicaciones. ¿Hay solución? (¿Debería crear otra pregunta o quedarme con esta?).
ACTUALIZACIÓN
Verifiqué rewrite_rules
y no aparece [types]. Cambié el slug a product-types
, actualicé los enlaces permanentes y ahora muestra:
[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]
Parece estar registrado, pero product-types/washer
o index.php?types=washer
dan 404. Tengo:
- taxonomy-types-washer.php
- taxonomy-types.php
No sé qué está mal.
ACTUALIZACIÓN #2
El problema era omitir 'rewrite'=>array('hierarchical'=>true)
. Ahora rewrite_rules
muestra:
[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]
Estos tipos de URLs son compatibles desde WP 3.1:
register_taxonomy( 'types', 'post', array(
'hierarchical' => true,
'rewrite' => array( 'hierarchical' => true ),
...
);
Recuerda limpiar las reglas de reescritura después de realizar el cambio.
La plantilla que usarías tanto para términos padres como hijos es taxonomy-types.php:
$current_term = get_queried_object();
if ( 0 == $current_term->parent ) {
// es un término padre; muestra sus términos hijos usando wp_list_categories() etc.
} else {
// es un término hijo; muestra las publicaciones usando The Loop etc.
}
