如何更改自定义帖子类型及其分类法的永久链接结构?


11

这是我先前提出的问题的转贴,但我现在想进入更多细节以完全解决此问题。

再次重申一下,使用(普通)帖子更改永久链接就像转到“设置”>“永久链接”并将其更改为您喜欢的任何东西(例如广泛使用的)一样容易%category%/%postname%.html。所有这一切。如果仅对于自定义帖子类型来说这是如此简单,那么它也是分类法。

所以这就是我想要完成的。

  1. http://mywordpress.com/portfolio.html-显示所有类别中的所有帖子。
  2. http://mywordpress.com/portfolio/music/-显示此类别中的所有帖子。
  3. http://mywordpress.com/portfolio/music/trance/-显示此(子类别)中的所有帖子。
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html-显示帖子。

到目前为止,我得到的是以下内容:

  1. 首先,我创建了一个custom_post_type命名项目和一个taxonomy project_category
  2. 我创建了一个页面投资组合,并为其提供了一个页面模板,该模板将列出所有post_type = project帖子。如何将.html添加到页面的永久链接?现在,它链接到http://mywordpress.com/portfolio,而我想要http://mywordpress.com/portfolio.html。这应该解决第一个问题。
  3. 这样一来,事情就会变得艰难,因为我们无法直接知道那里有多少个子类别,也许甚至没有。因此,我们所追求的结构是portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html。我仍然停留在这一点上。我认为我应该以某种方式将最后一个类别添加到路径中,并将其沿project_category传递,这将导致一个taxonomy.php文件,在这里我可以对其进行正确处理。
  4. 我也没有解决这个问题,但是它应该与某件事%postname%.html的结尾有关。

我希望我的问题很清楚,并且有勇敢的开发人员将帮助我解决这个已经使我忙了整整四天的问题!


1
如果正确实施,我在上一个问题中给出的解决方案应该可以采用这种方式。唯一的事情是您无法获取html部分
Manny Fleurmond 2011年

是的,但是它被锁定到特定路径,因此只有类别/子类别/页面,而可能没有子类别,甚至更多。这更加动态。
标记

或我没有正确实施它;)
标记

Answers:


4

好吧,我想我可能有解决办法。我不知道这是否是实现此目标的正确方法,但是到目前为止,这似乎是唯一可行的方法。

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}

如果我们要询问类别(实际上是术语)和帖子,则请求过滤器是一种很好的过滤方法。它允许仅添加一个重写规则并获得帖子页面,无论帖子是属于某个类别,子类别还是根本不属于该类别。
ZalemCitizen

1

2种不同方法:

*请参阅这篇文章底部的注释。


例如,您想要具有这样的永久链接结构:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

首先,您可能需要将永久链接设置为/%category%/%postname%。然后...




方法1:

创建标准类别(MAIN_CATEGORYSUB_CAT_1and etc..),并注册自定义后,包括该参数:

'taxonomies'    => array('category'..)

并使用此代码更改永久链接:https : //wordpress.stackexchange.com/a/195643/33667
然后,在发布自定义帖子(如果附加在类别下)后,URL将为:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



方法2:

(如果您打算发布数百或数千个帖子,则不建议使用ps此方法)

注册CUSTOM POST(名为MAIN_CATEGORY),包括以下参数:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

然后,按以下方式发布自定义帖子:(即,发布多个名为的自定义帖子。之后,当您发布另一篇文章时,请选择作为父项。
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1)如果您是新手,请查看:注册CUSTOM POST并向 TAXONOMY注册CUSTOM POST
2)如果您需要子级别的搜索功能,请使用自定义搜索查询


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.