如何为分层分类启用分层固定链接

时间:2011-05-15 作者:supertrue

如果你有一个名为“术语”的类别和一个名为“子术语”的子类别,你可以在/cat/subcat访问子术语帖子。但这在定制分类法中并不是现成的。它们可以在/分类法/子术语处访问,但不能在/分类法/术语/子术语处访问。

他们已经在Wordpress跟踪中检查过了(http://core.trac.wordpress.org/ticket/12659), 看起来他们有一个解决方案,但由于我从未使用过Trac,也不完全理解它的语言(diff等),我需要更有经验的人来告诉我如何实现这一点。是否有代码需要粘贴到Wordpress核心文件中?这是否已经实现,我可以为主题的功能添加一些内容。php?

如果可能的话,我宁愿不修改任何核心文件。帮助

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

从3.1开始,这在WordPress中实现。

当你register your taxonomy, 确保将“重写层次结构”(rewrite Hierarchy)以及分类法本身设置为true:

<?php
register_taxonomy(\'genre\',array(\'book\'), array(
\'hierarchical\' => true, // this makes it hierarchical in the UI
\'labels\' => $labels,
\'show_ui\' => true,
\'query_var\' => true,
\'rewrite\' => array( \'hierarchical\' => true ), // this makes hierarchical URLs
));

SO网友:totels

是否有方法向已注册的自定义分类法添加参数?我所有的分类法都是用插件构建的,所以如果我能为函数添加一些东西就好了。php,只需将“重写”=>数组(“分层”=>true)添加到这些分类法中。

您应该能够使用register_taxonomy 重新注册要影响的分类法。

http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/taxonomy.php#L305

警告:未测试的代码
(大多数情况下,我只是一时兴起。我对损坏的网站不承担任何责任):

function reregister_taxonomy() {
    # the post types that the taxonomy is registered to
    $post_types = array(\'post\');
    # set this to the taxonomy name
    $tax_name = \'TAXONOMY_NAME_TO_CHANGE\';
    # load the already created taxonomy as array so we can
    # pass it back in as $args to register_taxonomy
    $tax = (array)get_taxonomy($tax_name);

    if ($tax) {
        # adjust the hierarchical necessities
        $tax[\'hierarchical\'] = true;
        $tax[\'rewrite\'][\'hierarchical\'] = true;

        # adjust the hierarchical niceties (these could be ignored)
        $tax[\'labels\'][\'parent_item\'] = sprintf(__("Parent %s"),
            $tax->labels->singular_name);
        $tax[\'labels\'][\'parent_item_colon\'] = sprintf(__("Parent %s:"),
            $tax->labels->singular_name);

        # cast caps to array as expected by register_taxonomy
        $tax[\'capabilities\'] = (array)$tax[\'cap\'];
        # cast labels to array
        $tax[\'labels\'] = (array)$tax[\'labels\'];
        # register the taxonomy with our new settings
        register_taxonomy($tax_name, array(\'post\'), $tax);
    }
}
# init action with a late priority so other taxonomies are loaded
# alternatively could be done with the `registered_taxonomy` action hook
add_action(\'init\', \'reregister_taxonomy\', 9999);
写了这篇文章之后,我才意识到这个问题已经有一年半的历史了,也许有人会觉得它很有用。

SO网友:keha76

要使分层永久链接正常工作,您需要添加重写规则。我已经成功地汇编了一些代码,用自定义分类法创建了一个自定义的post类型,该分类法使用permalinks中反映的父/子术语。这并不完美,但它正在发挥作用!

function keha_add_rewrite_rules() {
        add_rewrite_rule( \'^posttype_slug/(.+?)/(.+?)/(.+?)$\', \'index.php?taxonomy=$matches[1]&taxonomy=$matches[2]&posttype=$matches[3]\', \'top\' );
        add_rewrite_rule( \'^posttype_slug/(.+?)/(.+?)/$\', \'index.php?posttype=$matches[2]\', \'top\' );
        add_rewrite_rule( \'^posttype_slug/(.+?)/(.+?)/(.+?)$\', \'index.php?posttype=$matches[3]\', \'top\' );
        add_rewrite_rule( \'^posttype_slug/(.+?)/(.+?)/?$\', \'index.php?taxonomy=$matches[2]\', \'top\' );
        add_rewrite_rule( \'^posttype_slug/(.+?)$\', \'index.php?taxonomy=$matches[1]\', \'top\' );
}
add_action(\'init\', \'keha_add_rewrite_rules\');
查看我在Github的工作示例:

https://github.com/keha76/WordPress-CPT-Hierarchical-Taxonomy-Permalinks

SO网友:Fury

感谢@anubhava

关于WP Rewrite API 找出解决方案。

1) 我已经创建了一个自定义重写url,并将其放入我的函数中。php

function services_rewrite_basic() {
  add_rewrite_rule(\'^services/.*\', \'index.php?page_id=110&level=$matches[1]&level=$matches[1]&level=$matches[1]\', \'top\');
}
add_action(\'init\', \'services_rewrite_basic\');
2)最终只保存了permlink页面,没有任何更改,它做到了这一点。

结束

相关推荐

curl problem or permalinks

我刚刚配置了我的VPS,我使用的是Centos,一切都很好,但如果我将永久链接设置为自定义结构,然后接受主页,没有帖子出现,它会显示404页,我想这是因为我没有启用curl,但我不知道我的php在哪里。我的centos中的ini文件?好的,我的卷曲被启用了,我检查过了phpinfo(); 这里是URLhttp://74.117.158.182/info.php但如果我在我的wordpress中设置了永久链接,那么接受主页,所有都会给我404页,你可以在这个URL上查看http://mbas.co.in如果