自定义帖子类型和固定链接

时间:2012-06-22 作者:Mark Chaney

我有一个名为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区域需要重做。

1 个回复
SO网友:Zach Lysobey

我真的不确定这里发生了什么-我没有对这样的重写做太多。

但如果这样:

$newRules[\'content/(.+)/(.+)/?$\'] = \'index.php?content=$matches[2]\'; 
$newRules[\'content/(.+)/?$\']      = \'index.php?campus=$matches[1]\'; 
是这个吗?:

$newRules[\'content/(.+)/(.+)/(.+)/?$\'] = \'index.php?content=$matches[3]\'; 
$newRules[\'content/(.+)/(.+)/?$\']      = \'index.php?campus=$matches[2]\'; 
要匹配:

/content/peoria/new-visitor/children/   
/content/peoria/connect/next-generation/children/

结束

相关推荐

Multiple permalinks

我的博客使用/?p=378 多年的permalink构造。这对Google Analytics没有多大帮助,我想把它改为YEAR/MONTH/DAY/post-title 结构有没有一种方法可以做到这一点而不丢失向后兼容性,以便旧的链接可以工作?