Page de liste de taxonomie personnalisée?

11

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

$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 exemple de l'une des taxonomies personnalisées que je veux utiliser est la suivante:

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/porkvoir une liste de tous les plats contenant du porc.

Ce que je veux faire, c'est pouvoir frapper myurl.com/main-ingredientet obtenir une liste de toutes les différentes valeurs des principaux ingrédients.

J'ai trouvé cette référence, 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 procéder?

Jack Johansson
la source

Réponses:

20

Il n'y a rien de intégré à WordPress pour fournir une page "d'index" pour votre taxonomie car votre question implique qu'il devrait y en avoir (et je suis d'accord, il devrait y en avoir! Mais il n'y en a pas.)

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 un main-ingredientslug URL et de lui attribuer un modèle de page pour votre thème que vous créerez (peut-être) appelé "Liste des ingrédients principaux" :

Capture d'écran montrant où définir le modèle de page dans WordPress
(source: mikeschinkel.com )

Voici un point de départ; peut-être utiliser 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 voici à quoi ressemble la page avec des données factices sur mon site de test:

Capture d'écran d'une page d'index de taxonomie pour un site WordPress

MikeSchinkel
la source
Salut Mike, oui je l'ai fait. Ça n'aide pas.
@Josh - J'ai ajouté le code que vous trouvez ici au functions.phpfichier de mon thème, puis je suis allé sur http://wp30.dev/main-ingredient/chicken/ ( wp30.devest mon site de test local) et j'ai obtenu cette capture d'écran . Donc, si cela ne fonctionne pas, vous avez un plugin ou un autre code qui l'empêche de fonctionner.
MikeSchinkel
Merci pour la réponse Mike. Cela fonctionne pour moi, mais ce n'est pas le problème que j'essaie de résoudre. J'essaie d'obtenir une liste des principaux ingrédients en allant au niveau supérieur de la taxonomie. En d'autres termes, si vous supprimez "poulet" de votre URL, vous devriez obtenir une page 404. C'est le problème que je rencontre.
@Josh - D'accord, je vois ça maintenant. Désolé, j'ai répondu à trop de questions aujourd'hui. Pour info, il n'y a rien de "intégré" dans WordPress pour gérer ce que vous demandez. Il serait tout à fait logique qu'elle soit là automatiquement, mais ce n'est pas le cas actuellement. J'écrirai une mise à jour qui est une solution de contournement.
MikeSchinkel
3
@Josh - "mais je déteste perdre la grande fonctionnalité intégrée de la visualisation et de la navigation des messages via le terme de taxonomie": je dois manquer quelque chose parce que je ne vois pas comment vous perdez quoi que ce soit avec cela?
MikeSchinkel