Custom Taxonomy URL

时间:2011-09-19 作者:maikunari

我已经在这里阅读了几个小时的所有类似答案,但找不到任何足以满足我需求的基本答案。

我有一个非层次化的自定义职位类型“库存”。我有一个自定义分类法“division”,它是库存类别

我希望单个页面的永久链接URL为:

sitename.com/division/postname
但它只是作为:

sitename.com/postname
获取要在url中显示的库存类别(部门)的最简单方法是什么?为了澄清,我想用division所代表的类别名称替换“division”。

非常感谢您的建议!

更新时间:

marfarma下面的回答非常有效,请注意,有必要在动态部分之前包含静态字符串:

\'rewrite\'   => array( \'slug\' => \'division/%division%\', \'with_front\' => false ),

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

如果您只想在URL中使用“division”,那么技巧是使用slug选项注册自定义帖子类型:

    \'rewrite\'   => array( \'slug\' => \'division\', \'with_front\' => false ),
然而,由于您想用division标记的当前值替换单词division,因此答案更有趣。

您需要做的是声明您自己的重写标记:%division%

global $wp_rewrite;
$wp_rewrite->add_rewrite_tag(\'%division%\', \'(.+?/)?\', \'division=\');
然后你的子弹被宣布如下:

    \'rewrite\'   => array( \'slug\' => \'%division%\', \'with_front\' => false ),
然后,您必须挂接post\\u type\\u link函数,以便能够解析标记。

add_filter(\'post_type_link\', \'division_permalink\', 10, 3);

function division_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, \'%division%\') === FALSE) return $permalink;

        // Get post
        $post = get_post($post_id);
        if (!$post) return $permalink;

        // Get taxonomy terms
        $terms = wp_get_object_terms($post->ID, \'division\');    
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
        else $taxonomy_slug = \'division-missing\';

    return str_replace(\'%division%\', $taxonomy_slug, $permalink);
}

Note: 未经测试的代码,如果您需要修复任何东西以使其正常工作,请告知我们。特别是,我通常会使用division/%division%格式,因此如果没有静态字符串放在动态部分前面,即像这样的URL:division/%division%/页,则此代码可能无法工作。php

Useful \'custom rewrite tag for custom post type\' tutorials on the web:

Interesting Custom Post Type Slug with Taxonomy and Custom Field

http://xplus3.net/2010/10/04/wp-rewrite-tags-in-permalinks/

http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks

Additional Note:

如果上面提供的代码没有静态前缀(即“division/%division%”)就无法工作,并且您确实需要它,那么我建议仔细阅读此插件的代码:

http://wordpress.org/extend/plugins/wp-no-category-base/

它只有93行(其中26行是标识插件和指定GPL许可的注释)。如果您可以将该逻辑复制到您的CPT中,并将其与上述内容结合起来,我怀疑它会起作用。

结束

相关推荐

Can't get permalinks working!

我无法让WordPress pretty permalinks在我的Fedora LAMP服务器上工作。如果我设置它们并单击页面/帖子链接,我会得到一个“哎呀!此链接似乎已断开。“”这个。htaccess文件可写且正在更新,mod\\u重写模块似乎已加载到我的httpd中。conf(见下文)我的apache日志中的错误只是说“找不到文档”</我已经筋疲力尽了!这是httpd.conf:### Section 1: Global Environment # start the rew