Пользовательская страница списка таксономии?

11

Я работаю на сайте ресторана, и у меня есть собственный тип поста для блюд, например:

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

Вот пример одной из пользовательских таксономий, которую я хочу использовать:

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

Пользовательские таксономии работают нормально в админке, и я могу зайти myurl.com/main-ingredient/porkи посмотреть список всех блюд со свининой в них.

То, что я хочу сделать, это иметь возможность myurl.com/main-ingredientполучить список всех значений основных ингредиентов.

Я нашел эту ссылку, и это именно то, что я пытаюсь сделать.

Но решение не работает для меня - я все еще получаю 404, когда собираюсь myurl.com/main-ingredient

Любые предложения о том, как лучше всего это сделать?

Джек Йоханссон
источник

Ответы:

20

В WordPress нет ничего встроенного, чтобы предоставить «индексную» страницу для вашей таксономии, поскольку ваш вопрос подразумевает, что она должна быть (и я согласен, она должна быть! Но нет.)

Вместо этого вам нужно взломать его, и один из способов сделать это - создать страницу под названием «Основной ингредиент» с main-ingredientURL-адресом и назначить ему шаблон страницы для вашей темы, который вы создадите (возможно) под названием «Основной список ингредиентов» :

Снимок экрана, показывающий, где установить шаблон страницы в WordPress
(источник: mikeschinkel.com )

Вот отправная точка; возможно используйте имя файла page-main-ingredient-list.php для вашего шаблона страницы:

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

А затем вот как выглядит страница с некоторыми фиктивными данными на моем тестовом сайте:

Снимок экрана страницы индекса таксономии для сайта WordPress

MikeSchinkel
источник
Привет, Майк, да, я сделал это. Это не помогает
@Josh - я добавил код, который вы найдете здесь, в functions.phpфайл моей темы, а затем зашел http://wp30.dev/main-ingredient/chicken/ ( wp30.devэто мой локальный тестовый сайт) и получил этот скриншот . Так что, если он не работает, у вас есть какой-то плагин или другой код, который заставляет его не работать.
MikeSchinkel
Спасибо за ответ, Майк. Это работает для меня, но это не проблема, которую я пытаюсь решить. Я пытаюсь получить список основных ингредиентов, перейдя на верхний уровень таксономии. Другими словами, если вы исключите «курицу» из своего URL, вы должны получить страницу 404. Это проблема, с которой я сталкиваюсь.
@ Джош - Хорошо, теперь я это вижу. Извините, я отвечал слишком много вопросов сегодня. К вашему сведению, в WordPress нет ничего «встроенного», чтобы справиться с тем, что вы просите. Было бы разумно, чтобы он был там автоматически, но в настоящее время это не так. Я напишу обновление, которое является обходным путем.
MikeSchinkel
3
@ Джош - «но я ненавижу потерять великолепную встроенную функциональность просмотра постов и навигации по терминологии таксономии»: Должно быть, я что-то упускаю, потому что не понимаю, как вы теряете что-то с этим?
MikeSchinkel