Сторінка списку спеціальних таксономій?


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


Привіт Майку, так, я це зробив. Це не допомагає.

@Josh - я додав код, який ви знайдете тут, до functions.phpфайлу моєї теми, а потім перейшов до http://wp30.dev/main-ingredient/chicken/ ( wp30.devмій місцевий тестовий сайт) і отримав цей знімок екрана . Тож якщо він не працює, у вас є якийсь плагін або інший код, який змушує його не працювати.
MikeSchinkel

Дякую за відповідь, Майк. Це працює для мене, але це не проблема, яку я намагаюся вирішити. Я намагаюся скласти перелік основних інгредієнтів, перейшовши на найвищий рівень систематики. Іншими словами, якщо ви усунете "курку" зі своєї URL-адреси, ви повинні отримати 404 сторінку. У цьому проблема, з якою я стикаюся.

@Josh - Гаразд, це я зараз бачу. Вибачте, я сьогодні відповідав на занадто багато питань. FYI, у WordPress немає нічого "вбудованого" способу, який би справляв те, що ви просите. Було б багато сенсу, щоб він був там автоматично, але наразі це не так. Я напишу оновлення, яке є вирішенням проблеми.
MikeSchinkel

3
@Josh - "але я ненавиджу втратити чудовий вбудований функціонал перегляду публікацій та навігації через термін таксономії": я повинен щось пропустити, тому що я не бачу, як ви нічого з цим втрачаєте?
MikeSchinkel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.