Halaman daftar taksonomi khusus?

11

Saya sedang bekerja di situs restoran, dan saya memiliki jenis posting khusus untuk hidangan, seperti:

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

Contoh salah satu taksonomi khusus yang ingin saya gunakan adalah ini:

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

Taksonomi khusus berfungsi dengan baik di admin, dan saya bisa pergi ke myurl.com/main-ingredient/porkdan melihat daftar semua hidangan dengan daging babi di dalamnya.

Apa yang ingin saya lakukan adalah dapat mencapai myurl.com/main-ingredientdan mendapatkan daftar semua nilai bahan utama.

Saya menemukan referensi ini , yang persis apa yang saya coba lakukan.

Tetapi solusinya tidak bekerja untuk saya - saya masih mendapatkan 404 ketika akan myurl.com/main-ingredient

Ada saran tentang cara terbaik untuk melakukan ini?

Jack Johansson
sumber

Jawaban:

20

Tidak ada built-in di WordPress untuk menyediakan halaman "indeks" untuk taksonomi Anda karena pertanyaan Anda menyiratkan seharusnya ada (dan saya setuju, harus ada! Tapi tidak ada.)

Alih-alih, Anda harus meretasnya dan salah satu cara untuk melakukannya adalah dengan membuat halaman yang disebut "Bahan Utama" dengan main-ingredientslug URL dan menetapkannya sebagai templat halaman untuk tema yang akan Anda buat (mungkin) disebut "Daftar Bahan Utama" :

Cuplikan layar memperlihatkan tempat untuk mengatur Templat Halaman di WordPress
(sumber: mikeschinkel.com )

Inilah titik awal; mungkin menggunakan nama file page-main-ingredient-list.php untuk templat halaman Anda:

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

Dan inilah tampilan halaman tersebut dengan beberapa data dummy di situs pengujian saya:

Cuplikan layar halaman Indeks Taksonomi untuk Situs WordPress

MikeSchinkel
sumber
Hai Mike, ya saya lakukan itu. Itu tidak membantu.
@Josh - Saya menambahkan kode yang Anda temukan di sini ke functions.phpfile tema saya dan kemudian pergi ke http://wp30.dev/main-ingredient/chicken/ ( wp30.devadalah situs pengujian lokal saya) dan mendapatkan tangkapan layar ini . Jadi jika tidak berfungsi, Anda memiliki beberapa plugin atau kode lain yang menyebabkannya tidak berfungsi.
MikeSchinkel
Terima kasih atas balasannya Mike. Itu berhasil bagi saya, tetapi bukan masalah yang saya coba pecahkan. Saya mencoba untuk mendapatkan daftar bahan-bahan utama dengan pergi ke tingkat atas taksonomi. Dengan kata lain, jika Anda menghilangkan "ayam" dari URL Anda, Anda harus mendapatkan halaman 404. Itulah masalah yang saya hadapi.
@Josh - Oke, saya melihat itu sekarang. Maaf, saya sudah terlalu banyak menjawab pertanyaan hari ini. FYI, tidak ada cara "bawaan" di WordPress untuk menangani apa yang Anda minta. Akan sangat masuk akal untuk berada di sana secara otomatis, tetapi saat ini tidak. Saya akan menulis pembaruan yang merupakan solusi.
MikeSchinkel
3
@Josh - "tapi saya benci kehilangan fungsionalitas bawaan yang besar dari tampilan pos dan navigasi melalui istilah taksonomi": Saya harus kehilangan sesuatu karena saya tidak melihat bagaimana Anda kehilangan sesuatu dengan ini?
MikeSchinkel