¿Página de lista de taxonomía personalizada?

30 ene 2011, 06:09:56
Vistas: 17.3K
Votos: 12

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?

0
Todas las respuestas a la pregunta 1
12
20

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":

Captura de pantalla mostrando dónde configurar la Plantilla de Página en WordPress
(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:

Captura de pantalla de una página de Índice de Taxonomía para un sitio WordPress

30 ene 2011 06:58:10
Comentarios

Hola Mike, sí hice eso. No ayuda.

User User
30 ene 2011 07:25:36

@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.

MikeSchinkel MikeSchinkel
30 ene 2011 07:34:12

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.

User User
30 ene 2011 07:48:50

@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.

MikeSchinkel MikeSchinkel
30 ene 2011 07:53:17

Genial, gracias - espero poder dejar esto atrás. ;-)

User User
30 ene 2011 08:12:37

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

MikeSchinkel MikeSchinkel
30 ene 2011 08:31:12

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.

User User
30 ene 2011 08:52:32

@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.

MikeSchinkel MikeSchinkel
30 ene 2011 09:04:07

@Jan - Listo. :)

t31os t31os
1 mar 2011 12:53:56

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?

aendra aendra
10 abr 2011 20:16:52

@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?

MikeSchinkel MikeSchinkel
15 abr 2011 14:33:21

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.

Dwayne Charrington Dwayne Charrington
8 may 2012 06:22:48
Mostrar los 7 comentarios restantes