在为“创建自定义帖子类型和自定义分类法”时,有一个数组选项"E;“重写”"E;您可以设置"E;“slug”"E;在那里你可以改变你的永久链接结构。
有关详细信息,请阅读here.
也是我从post 1 和post 2 其中一个帮助我闪现了一些想法。
1 Rewrite rule:您需要添加一个新的重写规则,以便Wordpress知道如何解释url结构。在我的例子中,uri的自定义post类型部分将始终是第5个uri段,因此我相应地定义了匹配规则。请注意,如果使用更多或更少的uri段,则可能必须更改此设置。如果您将有不同级别的嵌套术语,那么您需要编写一个函数来检查最后一个uri段是自定义post类型还是分类术语,以了解要添加的规则(如果您需要这方面的帮助,请询问我)。
add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules[\'basename/(.+)/(.+)/(.+)/(.+)/?$\'] = \'index.php?custom_post_type_name=$matches[4]\'; // my custom structure will always have the post name as the 5th uri segment
$newRules[\'basename/(.+)/?$\'] = \'index.php?taxonomy_name=$matches[1]\';
return array_merge($newRules, $rules);
}
2. Filter post type link:然后,您需要添加以下代码,以便让workpress能够在自定义post类型重写段塞结构中处理%taxonomy\\u name%:
function filter_post_type_link($link, $post)
{
if ($post->post_type != \'custom_post_type_name\')
return $link;
if ($cats = get_the_terms($post->ID, \'taxonomy_name\'))
{
$link = str_replace(\'%taxonomy_name%\', get_taxonomy_parents(array_pop($cats)->term_id, \'taxonomy_name\', false, \'/\', true), $link); // see custom function defined below
}
return $link;
}
add_filter(\'post_type_link\', \'filter_post_type_link\', 10, 2);
3. Custom function:我创建了一个基于Wordpress自己的自定义函数
get_category_parents
.
// my own function to do what get_category_parents does for other taxonomies
function get_taxonomy_parents($id, $taxonomy, $link = false, $separator = \'/\', $nicename = false, $visited = array()) {
$chain = \'\';
$parent = &get_term($id, $taxonomy);
if (is_wp_error($parent)) {
return $parent;
}
if ($nicename)
$name = $parent -> slug;
else
$name = $parent -> name;
if ($parent -> parent && ($parent -> parent != $parent -> term_id) && !in_array($parent -> parent, $visited)) {
$visited[] = $parent -> parent;
$chain .= get_taxonomy_parents($parent -> parent, $taxonomy, $link, $separator, $nicename, $visited);
}
if ($link) {
// nothing, can\'t get this working :(
} else
$chain .= $name . $separator;
return $chain;
}
4. Load again permalink setting page:然后你需要冲洗你的permalinks。
现在一切都“应该”了,希望如此!制作一组分类术语并正确嵌套,然后制作一些自定义帖子类型的帖子并正确分类。您还可以使用slug创建页面basename
, 一切都应该按照我在问题中指定的方式进行。您可能希望创建一些自定义分类归档页面来控制它们的外观,并添加某种分类小部件插件来在侧栏中显示嵌套的类别。
Taxonomy widget.
希望这有帮助。