问题描述

我有帖子类型’product’ 和分层分类’types’ 附加到它。在这个分类中,我有这样的术语:’dry-clean’,’washer’ 等。

在我的情况下,我需要显示,例如:

  1. http://example.com/types/washer – > 显示所有子条款

  2. http://example.com/types/washer/ {subterm} – > 显示所有帖子

我的问题是:

  1. 如何获得父条款的永久链接 URL?我尝试上面的 URL,但是导致 404 。

  2. 模板文件如何适用于这种问题?

    1. taxonomy-types-washer.php 是否适合#1 的情况?还是应该创建 taxonomy-types.php 并在那里创建逻辑?

    2. 在我看来,在扫描 template hierarchy 之后,我可能需要 taxonomy-types-{term_parent}.php 列出所有子条款和 taxonomy-types.php 以子条款列出所有产品。

    3. 最终要显示每个产品,我将不得不创建 single-product.php

  3. 在一个稍微无关的问题。我发现当我没有任何帖子时,archive-{posttype}.php 不起作用。有没有解决方案? (我应该创造不同的问题,还是坚持这个)?

UPDATE

我检查了我的 rewrite_rules 选项,它并没有列出 [types] 。我不知道为什么为了测试,我把我的屁股变成 product-types,冲洗固定链接,并列出这一点:

[product-types/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/([^/]+)/page/?([0-9]{1,})/?$] => index.php?types=$matches[1]&paged=$matches[2]
[product-types/([^/]+)/?$] => index.php?types=$matches[1]

所以我想现在注册了。我尝试加载 URL product-types/washer 它到 404. 我尝试加载 URL index.php?types=washer 。它也是 404. 现在,我有这个文件:

  • taxonomy-types-washer.php

  • taxonomy-types.php

所以,我不知道这个有什么问题:(

更新#2

我发现问题。这是因为我错过了'rewrite'=>array('hierarchical'=>true)

这是新的 rewrite_rules

[product-types/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?types=$matches[1]&feed=$matches[2]
[product-types/(.+?)/page/?([0-9]{1,})/?$] => index.php?types=$matches[1]&paged=$matches[2]
[product-types/(.+?)/?$] => index.php?types=$matches[1]

最佳解决方法

WP 3.1 之后支持这些类型的 URL:

register_taxonomy( 'types', 'post', array(
  'hierarchical' => true,
  'rewrite' => array( 'hierarchical' => true ),
  ...
);

记住在进行更改后刷新重写规则。

您将用于父项和子项的模板是 taxonomy-types.php:

$current_term = get_queried_object();

if ( 0 == $current_term->parent ) {
  // it's a parent term; display it's child terms using wp_list_categories() etc.
} else {
  // it's a child term; display the posts using The Loop etc.
}

参考文献

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