自定义帖子类型类别固定链接到/%category%/%postname%/

时间:2015-11-03 10:23:12

标签: wordpress custom-post-type permalinks

我已经创建了作为自定义帖子类型的投资组合。我想只为自定义帖子类型制作固定链接,例如:www.domain.com/custom-post-type-category/postname

目前的永久链接是:www.domain.com/custom-post-type/postname

它只是完全定制的帖子。

if(!function_exists("pexeto_register_portfolio_post_type")){
    function pexeto_register_portfolio_post_type() {

        //the labels that will be used for the portfolio items
        $labels = array(
            'name' => _x('Portfolio', 'portfolio name', 'pexeto'),
            'singular_name' => _x('Portfolio Item', 'portfolio type singular name', 'pexeto'),
            'add_new' => _x('Add New', 'portfolio', 'pexeto'),
            'add_new_item' => __('Add New Item', 'pexeto'),
            'edit_item' => __('Edit Item', 'pexeto'),
            'new_item' => __('New Portfolio Item', 'pexeto'),
            'view_item' => __('View Item', 'pexeto'),
            'search_items' => __('Search Portfolio Items', 'pexeto'),
            'not_found' =>  __('No portfolio items found', 'pexeto'),
            'not_found_in_trash' => __('No portfolio items found in Trash', 'pexeto'), 
            'parent_item_colon' => ''
        );

        //register the custom post type
        register_post_type( PEXETO_PORTFOLIO_POST_TYPE,
            array( 'labels' => $labels,
             'public' => true,  
             'show_ui' => true,  
             'capability_type' => 'post',  
             'hierarchical' => false,  
             'rewrite' => array('slug'=>'portfolio'),
             'taxonomies' => array('portfolio_category'),
             'supports' => array('title', 'editor', 'thumbnail', 'comments', 'page-attributes') ) );
    }
}

if(!function_exists("pexeto_register_portfolio_category")){
    function pexeto_register_portfolio_category(){

        register_taxonomy("portfolio_category",
        array(PEXETO_PORTFOLIO_POST_TYPE),
        array(  "hierarchical" => true,
            "label" => "Portfolio Categories", 
            "singular_label" => "Portfolio Categories", 
            "rewrite" => true,
            "query_var" => true
        ));
    }
}

1 个答案:

答案 0 :(得分:0)

我建议您尝试以下操作将所有网址从:post-type:/:post-name:更改为:post-category:/:post-name:

function portfolio_post_link($post_link, $post, $leavename) {
    if($post->post_type == 'portfolio') {
        $category_slug = get_the_terms($post->ID, 'portfolio_category');
        $category_slug = is_array($category_slug) ? '/' . $category_slug[0]->slug . '/' : '/';
        $post_link = str_replace('/'.$post->post_type.'/', $category_slug, $post_link);
    }
    return $post_link;
}
add_filter('post_type_link', 'portfolio_post_link', 10, 3);

但这还不够 - 你需要告诉自己如何处理这些新网址。我建议首先尝试上面的代码,看看你是否得到了这些新网址的404。如果是这样,您必须添加一些重写规则或使用pre_get_posts操作。