Página de lista de taxonomia personalizada?

11

Estou trabalhando no site de um restaurante e tenho um tipo de postagem personalizado para pratos, assim:

$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);

Um exemplo de uma das taxonomias personalizadas que eu quero usar é o seguinte:

register_taxonomy('Main Ingredient', array('dish'), array(
    'hierarchical' => true,
    'label' => 'Main Ingredient',
    'singular_label' => 'Main Ingredient',
    'query_var'=>true,
    'rewrite' => true)
);

As taxonomias personalizadas estão funcionando bem no administrador, e eu posso ir myurl.com/main-ingredient/porke ver uma lista de todos os pratos com carne de porco.

O que eu quero fazer é ser capaz de myurl.com/main-ingredientobter e obter uma lista de todos os vários valores dos ingredientes principais.

Encontrei essa referência, que é exatamente o que estou tentando fazer.

Mas a solução não está funcionando para mim - ainda estou recebendo um 404 quando vou myurl.com/main-ingredient

Alguma sugestão sobre a melhor forma de fazer isso?

Jack Johansson
fonte

Respostas:

20

Não há nada embutido no WordPress para fornecer uma página de "índice" para sua taxonomia, como sua pergunta implica que deveria haver (e eu concordo que deveria haver! Mas não existe.)

Em vez disso, você precisa hackear e uma maneira de fazer isso é criar uma página chamada "Ingrediente principal" com uma main-ingredientlesma de URL e atribuir a ele um modelo de página para o seu tema que você criará (talvez) chamado "Lista de ingredientes principais" :

Captura de tela mostrando onde definir o modelo de página no WordPress
(fonte: mikeschinkel.com )

Aqui está um ponto de partida; talvez use o nome do arquivo page-main-ingredient-list.php para o seu modelo de página:

<?php
/*
Template Name: Main Ingredient List
*/
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();

E aqui está a aparência da página com alguns dados fictícios no meu site de teste:

Captura de tela de uma página Índice de taxonomia de um site WordPress

MikeSchinkel
fonte
Oi Mike, sim, eu fiz isso. Isso não ajuda.
@ Josh - adicionei o código que você encontra aqui ao functions.phparquivo do meu tema e depois fui http://wp30.dev/main-ingredient/chicken/ ( wp30.devé o meu site de teste local) e obtive esta captura de tela . Portanto, se não estiver funcionando, você tem algum plugin ou outro código que está fazendo com que ele não funcione.
MikeSchinkel
Obrigado pela resposta Mike. Isso funciona para mim, mas não é o problema que estou tentando resolver. Estou tentando obter uma lista dos principais ingredientes, indo para o nível superior da taxonomia. Em outras palavras, se você eliminar "frango" do seu URL, deverá obter uma página 404. Esse é o problema que estou enfrentando.
@ Josh - Ok, eu vejo isso agora. Desculpe, eu tenho respondido muitas perguntas hoje. Para sua informação, não há nada "embutido" no WordPress para lidar com o que você está pedindo. Faria muito sentido estar lá automaticamente, mas atualmente não está. Escreverei uma atualização que é uma solução alternativa.
MikeSchinkel
3
@ Josh - "mas eu odeio perder a excelente funcionalidade interna da visualização de post e navegação via termo de taxonomia": devo estar perdendo alguma coisa, porque não vejo como você perde algo com isso?
precisa saber é o seguinte