问题描述

我一直在搜索 Google,这是无济于事。

我正在一个餐馆的网站上工作,我有一个定制的帖子类型的菜肴,如:

$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 并获得所有各种 main-ingredient 值的列表。

我发现这个参考,这正是我正在做的:Custom taxonomy listing page when no term set (all terms)

但解决方案对我来说并不奏效 – 当我去 myurl.com/main-ingredient 时,我仍然会收到 404

关于如何最好地做到这一点的任何建议?

最佳解决方案

没有任何内置到 WordPress 为您的分类提供一个”index” 页面,因为您的问题意味着应该有 (我同意,应该是!但没有。)

相反,你必须破解它,一种方法是创建一个名为”Main Ingredient” 的页面,其中包含一个 main-ingredient URL 段,并为您创建的主题 (可能称为 「主要成分列表」) 分配一个页面模板

这是一个起点; 也可以使用文件名 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();

那么这个页面看起来像我的测试网站上的一些虚拟数据:

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。