¿Página de lista de taxonomía personalizada?
Estoy trabajando en un sitio de restaurantes, y tengo un tipo de publicación personalizada para platos, así:
$args = array(
'labels'=> $labels,
'public'=> true,
'publicly_queryable'=>true,
'show_ui'=>true,
'show_in_nav_menus'=>true,
'query_var'=>'dish',
'rewrite'=>true,
'capability_type'=>'post',
'hierarchicial'=>false,
'menu_position'=>5,
'supports'=>array(
'title',
'editor',
'thumbnail',
'excerpt',
'custom-fields',
'revisions'
)
);
register_post_type('dish', $args);
Un ejemplo de una de las taxonomías personalizadas que quiero usar es este:
register_taxonomy('Main Ingredient', array('dish'), array(
'hierarchical' => true,
'label' => 'Ingrediente Principal',
'singular_label' => 'Ingrediente Principal',
'query_var'=>true,
'rewrite' => true)
);
Las taxonomías personalizadas funcionan bien en el administrador, y puedo ir a myurl.com/main-ingredient/pork
y ver una lista de todos los platos con cerdo.
Lo que quiero hacer es poder acceder a myurl.com/main-ingredient
y obtener una lista de todos los valores de ingredientes principales.
Encontré esta referencia, que es exactamente lo que estoy tratando de hacer.
Pero la solución no funciona para mí - sigo obteniendo un 404 cuando voy a myurl.com/main-ingredient
¿Alguna sugerencia sobre cómo hacer esto mejor?

No hay nada incorporado en WordPress que proporcione una página de "índice" para tu taxonomía como implica tu pregunta (y estoy de acuerdo, ¡debería haberlo! Pero no lo hay.)
En su lugar, tienes que implementar un solución alternativa y una forma de hacerlo es crear una página llamada "Ingrediente Principal" con un slug de URL main-ingredient
y asignarle una plantilla de página para tu tema que tendrás que crear (posiblemente) llamada "Lista de Ingredientes Principales":
(fuente: mikeschinkel.com)
Aquí tienes un punto de partida; quizás uses el nombre de archivo page-main-ingredient-list.php
para tu plantilla de página:
<?php
/*
Template Name: Lista de Ingredientes Principales
*/
get_header();
$main_ingredients = get_terms('main-ingredient');
foreach($main_ingredients as $main_ingredient) {
$dishes = new WP_Query(array(
'post_type' => 'dish',
'post_per_page'=>-1,
'taxonomy'=>'main-ingredient',
'term' => $main_ingredient->slug,
));
$link = get_term_link(intval($main_ingredient->term_id),'main-ingredient');
echo "<h2><a href=\"{$link}\">{$main_ingredient->name}</a></h2>";
echo '<ul>';
while ( $dishes->have_posts() ) {
$dishes->the_post();
$link = get_permalink($post->ID);
$title = get_the_title();
echo "<li><a href=\"{$link}\">{$title}</a></li>";
}
echo '</ul>';
}
get_footer();
Y así es como se ve la página con algunos datos de prueba en mi sitio de pruebas:

@Josh - Agregué el código que encuentras aquí al archivo functions.php
de mi tema y luego fui a http://wp30.dev/main-ingredient/chicken/
(wp30.dev
es mi sitio de pruebas local) y obtuve esta captura de pantalla. Así que si no funciona, tienes algún plugin u otro código que está causando que no funcione.

Gracias por tu respuesta Mike. Eso sí funciona para mí, pero no es el problema que estoy tratando de resolver. Estoy intentando obtener un listado de los ingredientes principales yendo al nivel superior de la taxonomía. En otras palabras, si eliminas "chicken" de tu URL, deberías obtener una página 404. Ese es el problema con el que me estoy encontrando.

@Josh - Vale, ahora lo veo. Lo siento, he estado respondiendo demasiadas preguntas hoy. Para tu información, no hay una forma "integrada" en WordPress para manejar lo que estás preguntando. Tendría mucho sentido que estuviera ahí automáticamente, pero actualmente no es así. Escribiré una actualización que es una solución alternativa.

@Josh - Creo que mi respuesta actualizada tendrá más sentido para ti.

Sí, ya había pensado en hacer eso, pero odio perder la excelente funcionalidad integrada de visualización de publicaciones y navegación a través de términos de taxonomía. Aunque gracias por las respuestas.
Con suerte, WP añadirá pronto esa funcionalidad de índice de taxonomía.

@Josh - "pero odio perder la excelente funcionalidad integrada de visualización de publicaciones y navegación a través de términos de taxonomía": Debo estar pasando algo por alto porque no veo cómo pierdes algo con esto.

Decidí hacer esto como último recurso en un proyecto de taxonomía personalizada en el que estoy trabajando (preferiría no saturar la lista de Páginas de mi cliente con un montón de páginas vacías), pero al no encontrar otras respuestas, supongo que esta sigue siendo la única forma de lograr una tarea similar a la del OP. Mike, ¿sabes si han actualizado esto en versiones recientes?

@aendrew - "Mike, ¿sabes si han actualizado esto en versiones recientes?" Lo siento pero no estoy siguiendo el contexto de tu pregunta. Quizás sea mejor hacer una nueva pregunta?

Solo me gustaría señalar que quien hizo la pregunta está usando un nombre inválido para la función register_taxonomy, el nombre de la taxonomía debe estar en minúsculas y sin espacios según la documentación que establece: "El nombre de la taxonomía. El nombre debe estar en formato slug (no debe contener letras mayúsculas o espacios)". Pregunta antigua, pero algo a tener en cuenta si estás usando los consejos y código de esta pregunta para cualquier proyecto.
