Niestandardowa strona z listą taksonomii?

11

Pracuję w witrynie restauracji i mam niestandardowy typ postu na temat potraw, na przykład:

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

Przykładem jednej z niestandardowych systematyk, których chcę użyć, jest:

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

Niestandardowe taksonomie działają dobrze w adminie i mogę przejść do myurl.com/main-ingredient/porklisty wszystkich potraw z wieprzowiną.

To, co chcę zrobić, to móc trafić myurl.com/main-ingredienti uzyskać listę wszystkich różnych wartości głównego składnika.

Znalazłem to odniesienie, które właśnie staram się zrobić.

Ale to rozwiązanie nie działa dla mnie - wciąż dostaję 404, kiedy jeżdżę myurl.com/main-ingredient

Wszelkie sugestie, jak najlepiej to zrobić?

Jack Johansson
źródło

Odpowiedzi:

20

W WordPress nie ma nic wbudowanego, by zapewnić stronę „indeksu” dla twojej taksonomii, ponieważ twoje pytanie sugeruje, że powinno być (i zgadzam się, powinno być! Ale nie ma).

Zamiast tego musisz go zhakować, a jednym ze sposobów jest utworzenie strony o nazwie „Główny składnik” z informacją o main-ingredientadresie URL i przypisanie jej szablonu strony dla motywu, który utworzysz (być może) o nazwie „Główna lista składników” :

Zrzut ekranu pokazujący, gdzie ustawić szablon strony w WordPress
(źródło: mikeschinkel.com )

Oto punkt wyjścia; może użyć nazwy pliku page-main-ingredient-list.php dla szablonu strony:

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

A oto, jak wygląda strona z niektórymi fałszywymi danymi w mojej witrynie testowej:

Zrzut ekranu strony Indeks taksonomii dla witryny WordPress

MikeSchinkel
źródło
Cześć Mike, tak, zrobiłem to. To nie pomaga.
@Josh - dodałem kod, który tu znajdziesz, do functions.phppliku mojego motywu, a następnie poszedłem http://wp30.dev/main-ingredient/chicken/ ( wp30.devjest to moja lokalna strona testowa) i otrzymałem zrzut ekranu . Jeśli więc nie działa, masz wtyczkę lub inny kod, który powoduje, że nie działa.
MikeSchinkel 30.01.11
Dzięki za odpowiedź Mike. To działa dla mnie, ale nie jest to problem, który próbuję rozwiązać. Próbuję uzyskać listę głównych składników, przechodząc do najwyższego poziomu taksonomii. Innymi słowy, jeśli wyeliminujesz „kurczaka” ze swojego adresu URL, powinieneś otrzymać stronę 404. Właśnie na to wpadam.
@Josh - Dobra, teraz to widzę. Przepraszam, odpowiadam dziś na zbyt wiele pytań. Do Twojej wiadomości, WordPress nie ma wbudowanego sposobu obsługi tego, o co prosisz. Miałoby sens sens, aby było tam automatycznie, ale obecnie tak nie jest. Napiszę aktualizację, która jest obejściem.
MikeSchinkel 30.01.11
3
@Josh - „ale nienawidzę tracić świetnej wbudowanej funkcjonalności przeglądania postów i nawigacji za pomocą terminologii taksonomicznej”: muszę coś przeoczyć, ponieważ nie rozumiem, jak to stracisz?
MikeSchinkel,