在子分类页面永久链接中包含父分类

Include parent taxonomy in child taxonomy page permalink

老实说,我很迷茫,可以使用一些指导来结束我一直在做的项目

我有一个单一的层次分类法,县,我正在使用我的两个自定义 post 类型,平面图和现成的。

我正在尝试设置指向将显示为的自定义分类法页面的永久链接:

{post-type}/{parent-tax}/{child-tax}

现在,您可以导航至 or,因此 floorplans/{parent-tax} 和 floorplans/{child-tax} 将指向相同的县-taxonomy.php 模板。您可以对现成/{parent-tax} 和现成/{child-tax} 执行相同的操作。

但是,如果您直接浏览分类并导航到子分类,url 将显示为县/{parent-tax}/{child-tax}。

我想不通的是,当您按自定义 post 类型库导航时,如何将父分类法附加到子分类法永久链接。 floorplans/{parent-tax}/{child-tax} 和 ready-made/{parent-tax}/{child-tax} 是 404。

我需要写重写规则吗?我有点不知道该怎么做。为了让我的父分类和子分类显示在 post 类型的永久链接中,我紧跟其后,但最后一个难题是能够导航到特定的子分类页面每个 post 类型,并在 url.

中包含父分类

我的重写规则现在看起来与我链接的指南几乎相同,

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules)
{
    $newRules  = array();
    $newRules['floorplan/(.+)/(.+)/?$'] = 'index.php?floorplan=$matches[2]'; // my custom structure will always have the post name as the 5th uri segment
    $newRules['ready-made/(.+)/(.+)/?$'] = 'index.php?ready_made=$matches[2]'; // my custom structure will always have the post name as the 5th uri segment

    $newRules['floorplan/(.+)/(.+)/'] = 'index.php?county=$matches[1]'; // my custom structure will always have the post name as the 5th uri segment
    $newRules['ready-made/(.+)/(.+)/'] = 'index.php?county=$matches[1]'; // my custom structure will always have the post name as the 5th uri segment

    $newRules['floorplan/(.+)/?$']                = 'index.php?county=$matches[1]';
    $newRules['ready-made/(.+)/?$']                = 'index.php?county=$matches[1]';
    return array_merge($newRules, $rules);
}

我添加了这两个中间值,认为这将以 parent-tax/child-tax 的永久链接结构为目标,后面没有任何尾随,但我不确定如何从那里拼凑起来。任何提示将不胜感激!

回答我自己的问题,

为了达到预期的效果,这里是最后的重写函数:

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules)
{
    $newRules  = array();
    $newRules['floorplan/(.+)/(.+)/(.+)/?$'] = 'index.php?floorplan=$matches[3]';
    $newRules['ready-made/(.+)/(.+)/(.+)/?$'] = 'index.php?ready_made=$matches[3]';

    $newRules['floorplan/(.+)/(.+)/?$'] = 'index.php?county=$matches[2]';
    $newRules['ready-made/(.+)/(.+)/?$'] = 'index.php?county=$matches[2]';

    $newRules['floorplan/(.+)/?$']                = 'index.php?county=$matches[1]';
    $newRules['ready-made/(.+)/?$']                = 'index.php?county=$matches[1]';
    return array_merge($newRules, $rules);
}

我从其他 Whosebug 答案中拼凑了这个,但据我所知,这些重写基本上是在说: 对于给定的 url,显示 post-type/taxonomy-type/etc,其中 matches[x] 是您要显示的内容的实际页面标题。