Özel sınıflandırma listesi sayfası?


11

Bir restoran sitesinde çalışıyorum ve yemekler için özel bir yazı türüm var, şöyle:

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

Kullanmak istediğim özel sınıflandırmalardan birine bir örnek şudur:

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

Özel taksonomiler yöneticide iyi çalışıyor ve ben de myurl.com/main-ingredient/porkonlara domuz eti olan tüm yemeklerin bir listesini görebilir ve görebilirsiniz.

Yapmak istediğim şey, myurl.com/main-ingredientçeşitli ana bileşen değerlerine çarpıp bir liste alabilmek.

Bu referansı buldum , ki tam da yapmaya çalıştığım şey bu.

Ama çözüm benim için çalışmıyor - hala giderken 404 alıyorum myurl.com/main-ingredient

Bunu en iyi nasıl yapacağınıza dair herhangi bir öneriniz var mı?

Yanıtlar:


20

WordPress'te , taksonominiz için bir "dizin" sayfası sağlamak için yerleşik bir şey yoktur , çünkü sorunuzun olması gerektiği anlamına gelir (ve kabul ediyorum, olması gerekir! Ama yoktur.)

Bunun yerine o adlı bir sayfa oluşturmaktır yapması gerektiğini ve tek yönlü kesmek zorunda "Ana Bileşen" a sahip main-ingredientURL sümüklü böcek ve ona atamak sen yaratacağı Temanız için bir sayfa şablonu (belki) denilen "Ana İçerik Listesi" :

WordPress'te Sayfa Şablonu'nun nereye ayarlanacağını gösteren ekran görüntüsü
(kaynak: mikeschinkel.com )

İşte bir başlangıç ​​noktası; belki page-main-ingredient-list.php sayfa şablonunuz için dosya adını kullanın :

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

Ve işte test sitemdeki bazı sahte verilerle sayfanın görünümü şöyle:

Bir WordPress Sitesi için Taksonomi Dizini sayfasının ekran görüntüsü


Merhaba Mike, evet bunu yaptım. Yardımcı olmuyor.

@Josh - Ben ekledi burada bulabilirsiniz kodu benim temanın için functions.phpdosyaya ve sonra gitti http://wp30.dev/main-ingredient/chicken/ ( wp30.devbenim lokal test yeri) ve got bu ekran görüntüsü . Bu yüzden çalışmıyorsa, çalışmamasına neden olan bazı eklentiler veya başka bir kodunuz vardır.
MikeSchinkel

Cevabınız için teşekkürler Mike. Bu benim için işe yarıyor, ama çözmeye çalıştığım sorun değil. Taksonominin en üst seviyesine giderek ana malzemelerin bir listesini almaya çalışıyorum. Başka bir deyişle, "tavuk" u URL'nizden kaldırırsanız, bir 404 sayfası edinmelisiniz. Karşılaştığım sorun bu.

@Josh - Tamam, şimdi görüyorum. Üzgünüm, bugün çok fazla soruya cevap veriyorum. FYI, WordPress'te istediğiniz şeyi işlemek için "yerleşik" bir yol yok. Otomatik olarak orada olması çok mantıklı olurdu, ama şu anda değil. Geçici çözüm olan bir güncelleştirme yazacağım.
MikeSchinkel

3
@Josh - "ama taksonomi terimi ile yazı görüntüleme ve navigasyon büyük yerleşik işlevselliğini kaybetmekten nefret ediyorum": Bir şey eksik olmalı çünkü bununla nasıl bir şey kaybettiğinizi görmüyorum?
MikeSchinkel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.