Taxonomías, Términos y Archivos de Plantilla en WordPress

10 abr 2011, 22:57:22
Vistas: 4.02K
Votos: 7

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:

  1. http://example.com/types/washer → mostrar todos los sub-términos
  2. http://example.com/types/washer/{subterm} → mostrar todas las publicaciones

Mis preguntas son:

  1. ¿Cómo obtengo el permalink URL para los términos padres? Intenté con la URL anterior, pero resulta en 404.
  2. ¿Cómo funcionan los archivos de plantilla para este tipo de problema?
    1. ¿Es suficiente taxonomy-types-washer.php para el caso #1? ¿O debería crear taxonomy-types.php y poner la lógica allí?
    2. Según la jerarquía de plantillas, podría necesitar taxonomy-types-{term_parent}.php para listar sub-términos y taxonomy-types.php para listar productos en sub-términos.
    3. Finalmente, para mostrar cada producto, necesitaré single-product.php.
  3. 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]
3
Comentarios

Sé que esto se puede hacer http://wordpress.stackexchange.com/questions/5308/custom-post-types-taxonomies-and-permalinks/5313#5313 pero para taxonomías "no jerárquicas".

Bainternet Bainternet
11 abr 2011 02:09:29

Deberías crear una nueva pregunta para el punto 3.

scribu scribu
11 abr 2011 03:09:45

@scribu, crearé esa pregunta esta noche, cuando regrese a casa.

ariefbayu ariefbayu
11 abr 2011 12:14:13
Todas las respuestas a la pregunta 1
0

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