是否有可能在一个固定链接中包含分级分类和分级定制帖子类型?

时间:2012-12-17 作者:timoto

wordpress是否能够在一个permalink中具有层次分类法和层次自定义帖子类型?

我想做以下工作:

tax-1/tax-2/cpt-1/cpt-1-post/cpt-2/cpt-2-post/

换句话说:

continent/country/travelog/travelog-post/videos/video-post/

或者在一个真实的案例中,“海滩上的一天”是travelog帖子,“我的树干里的沙子”是视频帖子:

europe/spain/travelog/a-day-at-the-beach/videos/sand-in-my-trunks/

我有4种自定义帖子类型,它们总是在cpt-1级别,还有3种自定义帖子类型(视频、照片、草图),它们总是出现在cpt-2的子级别。

完成后,该网站总共将有大约4000个帖子。

我希望有一个或多个插件可以帮助实现这一点,但到目前为止,我还没有找到这种神奇的组合。如果没有,这个permalink结构可以用url重写和REGEX自定义编码吗?

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

长话短说,这个问题的答案是肯定的。

最后,我能够创建:tax-1/tax-2/cpt-1/cpt-1-post/cpt-2/cpt-2-post/

还有另一个结构:tax-1/tax-2/cpt-1/cpt-1-post/cpt-2/custom field/cpt-2-post/

我使用的类型来自http://wp-types.com/ 要创建分层自定义分类法,需要自定义帖子类型、自定义字段,但最重要的是自定义帖子类型之间的父/子关系。那个插件节省了很多时间。

下一步是使用正则表达式重新写入URL。

    <?php


    // Add custom rewrite rules

    add_filter( \'rewrite_rules_array\',\'my_insert_rewrite_rules\' );

    // Add custom variable for WP_QUERY

    add_filter( \'query_vars\',\'my_insert_query_vars\' );

    // This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated.

    add_action( \'wp_loaded\',\'my_flush_rules\' );

    // Flush rules for include custom rewrite rules

    function my_flush_rules(){
        $rules = get_option( \'rewrite_rules\' );
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

    // Add custom rewrite rules

    function my_insert_rewrite_rules( $rules ){
        $newrules = array();  

        $location_list = get_terms("location",array("parent" => 0, "hide_empty" => 0));
        foreach($location_list as $location){
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]&type=$matches[2]&type_title=$matches[3]&media_type=$matches[4]&media_maintitle=$matches[5]&media_title=$matches[6]\',\'location\',$location->slug);
            $newrules[$location->slug.\'/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?\'] = $base_url;
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]&type=$matches[2]&type_title=$matches[3]&media_type=$matches[4]&media_title=$matches[5]\',\'location\',$location->slug);        
            $newrules[$location->slug.\'/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?\'] = $base_url;
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]&type=$matches[2]&type_title=$matches[3]&media_type=$matches[4]\',\'location\',$location->slug);        
            $newrules[$location->slug.\'/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?\'] = $base_url;
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]&type=$matches[2]&type_title=$matches[3]\',\'location\',$location->slug);        
            $newrules[$location->slug.\'/([^/]+)/([^/]+)/([^/]+)/?\'] = $base_url;
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]&type=$matches[2]\',\'location\',$location->slug);        
            $newrules[$location->slug.\'/([^/]+)/([^/]+)/?\'] = $base_url;
            $base_url = sprintf(\'index.php?taxonomy=%s&term=%s&child_term=$matches[1]\',\'location\',$location->slug);        
            $newrules[$location->slug.\'/([^/]+)/?\'] = $base_url;
        }

        return $newrules + $rules;
    }

    // Add custom variable for WP_QUERY

    function my_insert_query_vars( $vars ){                                                                                               
        array_push($vars, \'taxonomy\');          
        array_push($vars, \'child_term\');                   
        array_push($vars, \'type\');                       
        array_push($vars, \'type_title\');                           
        array_push($vars, \'media_type\');                                
        array_push($vars, \'media_maintitle\');                    
        array_push($vars, \'media_title\'); 
        return $vars;
    }

    ?>
我不确定这里是否创建了最佳的REGEX规则,但我发现我必须做很多事情来确保重新定向到位,确保没有多个URL显示相同内容的可能性。

答案比我在这里发布的更多,但我认为我可以发布的行数是有限的。

结束

相关推荐

Archive permalinks

这个网站对我学习如何使用add\\u过滤器重写永久链接非常有帮助,可以解决我们将两个博客合并为一个博客时遇到的问题。但是,我确实有一件物品我找不到任何提示:在基于日期的存档链接上,即www.domain。com/2011/12/我只是想把它们翻译成:www.domain。com/news/2011/12/提前感谢您的帮助。