我有一个名为Content的自定义帖子类型,其功能类型为“page”,设置为\'hierarchical\' => true
. 我有两页同名的书;“儿童”;,但他们有不同的父母。我应该采取什么不同的做法,使WP不会同时显示这两个URL,无论我访问的是哪一个URL?以下是我的代码片段,其中显示了重写规则:
add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules[\'content/(.+)/(.+)/?$\'] = \'index.php?content=$matches[2]\';
$newRules[\'content/(.+)/?$\'] = \'index.php?campus=$matches[1]\';
return array_merge($newRules, $rules);
}
function filter_post_type_link($link, $post)
{
if ($post->post_type != \'content\')
return $link;
if ($cats = get_the_terms($post->ID, \'campus\'))
{
$link = str_replace(\'%campus%\', get_taxonomy_parents(array_pop($cats)->term_id, \'campus\', false, \'\', true), $link); // see custom function defined below
}
return $link;
}
add_filter(\'post_type_link\', \'filter_post_type_link\', 10, 2);
// 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;
}
这两个URL如下所示:
/内容/人物/新访客/儿童/
/内容/peoria/connect/下一代/儿童/
当转到这些URL中的任何一个时,它应该仅是该特定“页面”的内容,而不是同一页面上两者的内容。
有什么建议吗?我假设$newRules区域需要重做。