具有多个分类的存档页面重写

时间:2017-09-19 作者:jedifunk

好吧,我已经阅读了这个问题的几乎所有答案,但我的情况一定是独一无二的。

我试图做的理论上很简单。

注册CPT时,我设置了以下内容:

\'rewrite\' => array(
        \'slug\' => \'resources/%resource_type%\',
        \'with_front\' => false
    ),
\'with_front\' => false 因为标准立柱使用底座。

我还有一页example.com/resources 模板为page-resources.php.

当我注册Tax1时,我设置了以下内容:

\'rewrite\'  => array( 
        \'slug\' => \'resources\',
        \'with_front\' => false
    )
我有一个resource_type 名称为的术语white-papers.

这产生了我第一个想要的permalink结果example.com/resources/white-papers/ 对于分类法存档页,请使用taxonomy-resource_type.php.

这就是事情变得棘手的地方。我试图做的是添加第二个分类法(Tax2),并创建另一个永久链接为:

example.com/resources/white-papers/enterprise

此归档文件是经过筛选的归档文件,它应该只显示resource_type = white-papersindustry = enterprise.

相反,我得到404.

但如果我尝试使用查询example.com/index.php?post_type=resource&resource_type=white-papers&industry=enterprise 我获得了所需的筛选存档页面。

此外,我不确定它是否与问题相关,但我运行了此函数:

function resources_cpt_generating_rule($wp_rewrite) {
  $rules = array();
  $terms = get_terms( array(
    \'taxonomy\' => \'resource_type\',
    \'hide_empty\' => false,
  ) );

$post_type = \'resource\';
foreach ($terms as $term) {    

    $rules[\'resources/\' . $term->slug . \'/([^/]*)$\'] = \'index.php?post_type=\' . $post_type. \'&resource_type=$matches[1]&name=$matches[1]\';

}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter(\'generate_rewrite_rules\', \'resources_cpt_generating_rule\');
我需要帮助的是实现这一点的重写规则。

任何帮助都将提前感谢!

1 个回复
最合适的回答,由SO网友:jedifunk 整理而成

好的,所以我想我会回来回答我自己的问题,以防它对其他人有用。

首先,CPT:

\'query_var\' => true,
    \'has_archive\' => false,
    \'rewrite\' => array(
        \'slug\' => \'resources\',
        \'with_front\' => false
    ),
税种1:

\'query_vars\' => true,
    \'rewrite\' => array( 
        \'slug\' => \'resources/type\',
        \'with_front\' => false
    )
税种2:

\'query_vars\' => true,
\'rewrite\' => array(
        \'with_front\' => false
    )
重写:

add_rewrite_rule( \'^resources/type/([^/]*)/industry/([^/]*)/?$\', \'index.php?post_type=resources&resource_type=$matches[1]&industry=$matches[2]\', \'top\' );
这会产生一个与我最初打算的略有不同的URL结构,虽然它有点冗长,但我认为它也可以工作。

example.com/resources = page-resources.php

example.com/resources/type/white-papers = taxonomy-resource_type.php 对于Tax1术语white-papers.

example.com/resources/type/white-papers/industry/enterprise = 同样的taxonomy-resource_type.php 存档模板,但仅提供Tax1和Tax2的CPT结果。

这正是我希望实现的功能。

结束

相关推荐

Custom archives function

我正在为我的教会网站建立一个自定义档案页面。在我的档案页上,我想把上周的布道放在一个特殊的盒子里,然后是未来的布道,最后是布道档案。我希望将来的布道和布道档案用标题隔开。。。i、 未来的布道布道档案布道档案。。。我的问题是,当我用分页功能点击按钮转到旧的布道帖子时,它会在我所在的每个归档页面上显示当前和未来的布道!如何使当前和未来的布道仅显示在第1页上,而不在单击查看旧帖子时显示?以下是我的功能:// Create the loop for the sermons page function se