web-dev-qa-db-fra.com

Page de liste de taxonomie personnalisée?

Je travaille sur un site de restaurant et j'ai un type de message personnalisé pour les plats, comme suit:

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

Voici un exemple de taxonomies personnalisées que je veux utiliser:

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

Les taxonomies personnalisées fonctionnent bien dans l’administrateur, et je peux aller à myurl.com/main-ingredient/pork et voir une liste de tous les plats contenant du porc.

Ce que je veux faire, c'est pouvoir appuyer sur myurl.com/main-ingredient et obtenir une liste de toutes les valeurs des principaux ingrédients.

J'ai trouvé this reference, ce qui est exactement ce que j'essaie de faire.

Mais la solution ne fonctionne pas pour moi - je reçois toujours un 404 en allant à myurl.com/main-ingredient

Des suggestions sur la meilleure façon de faire cela?

11
user2814

Il n’existe rien dans WordPress qui fournisse une page "index" pour votre taxonomie, car votre question implique qu’il devrait y avoir (et je suis d’accord, il devrait y en avoir! Mais ce n’est pas le cas.)

Au lieu de cela, vous devez le pirater et une façon de le faire est de créer une page appelée "Ingrédient principal"} avec une adresse URL main-ingredient et de lui attribuer un modèle de page que vous utiliserez. créer (peut-être) appelé "Liste principale d'ingrédients":

 Screenshot showing where to set Page Template in WordPress 
(source: mikeschinkel.com )

Voici un point de départ. utilisez peut-être le nom de fichier page-main-ingredient-list.php pour votre modèle de page:

<?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();

Et puis voici à quoi ressemble la page avec des données factices sur mon site de test:

Screenshot of a Taxonomy Index page for a WordPress Site

20
MikeSchinkel