Wordpress默认博客和自定义发布分类法路径问题

时间:2014-01-28 15:05:40

标签: wordpress categories custom-post-type permalinks custom-taxonomy

我好像在这里碰了一堵砖墙。我们正在构建一个新的wordpress网站,永久链接结构是'/ labs /%postname%/'。这适用于所有帖子,使用/ labs /作为基础。我们的问题是我们需要为我们的产品组合定制一个帖子类型,我的基本网址应该是/工作,然后可能是/ work / digital,/ work / cgi等等。我也创建了自定义帖子类型和分类法,但无论我做什么,我所有自定义帖子的网址都以/ labs /开头。

我尝试了大量的建议,从重写规则到更改register_taxonomy函数中的重写参数。我正在使用的代码如下:

function create_post_type() {
register_post_type( 'our_work',
    array(
        'labels' => array(
            'name' => __( 'Work Items' ),
            'singular_name' => __( 'Work Item' )
        ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'work'),
        'supports' => array(
            'title',
            'editor',
            'excerpt',
            'custom-fields',
            'revisions',
            'thumbnail',
            'page-attributes'   
        ),
    )
);
}
add_action( 'init', 'create_post_type' );

function create_taxonomies() {
register_taxonomy('work-categories', array('our_work'), array(
    'labels' => array(
        'name' => 'Work Categories'
    ),
    'show_ui' => true,
    'show_tagcloud' => false,
    'rewrite' => true,
    'hierarchical' => true,
    'with_front' => false
));
}
add_action('init', 'create_taxonomies');

尝试将rewrite参数更改为true,false,hierarchical,甚至将其替换为/或自定义帖子类型的名称。

甚至可以这样做吗?我们本来想要做的就是将博客和自定义帖子放在2个不同的基本路径下,我认为这样做很容易!

抱歉,如果之前已经涵盖了这个术语,那么术语就会混淆,搜索结果会带来任何对这个问题非常遥远的事情。

谢谢!

1 个答案:

答案 0 :(得分:0)

在发布此处之后,我似乎总能找到自己的解决方案......对于有相同问题的人,请确保自定义帖子类型和分类法的注册中的slug是相同的...还要确保你使用发电机,因为很容易错过一些东西......所以现在我正在让两个基地工作都没有问题! :)

编辑:因此,您在常规设置中使用的任何基础都适用于您的所有普通帖子,但添加了功能并将所有内容绑定,所有自定义的帖子都将被重写。希望这有帮助!

<?php 

/**
 * Register Custom Post Type
*/
function create_post_type() {
register_post_type( 'our_work', array(
        'label'              => 'Work Items',
        'singular_label'     => 'Work Item',
        'description'        => 'Our work items',
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'query_var'          => true,
        'has_archive'        => true,
        'hierarchical'       => true,
        'supports'           => array( 'title', 'editor', 'excerpt', 'custom-fields', 'revisions', 'thumbnail', 'page-attributes' ),
        'rewrite'            => array( 'slug' => 'work-items/%work-categories%', 'with_front' => false),
    )
);
}
add_action( 'init', 'create_post_type' );

/**
 * Register Custom Taxonomy
*/
function create_taxonomies() {
$labels = array(
    'name'                       => 'work-categories',
    'singular_name'              => 'work-category',
    'menu_name'                  => 'Work Categories',
    'all_items'                  => 'All Items',
    'parent_item'                => 'Parent Item',
    'parent_item_colon'          => 'Parent Item:',
    'new_item_name'              => 'New Item Name',
    'add_new_item'               => 'Add New Item',
    'edit_item'                  => 'Edit Item',
    'update_item'                => 'Update Item',
    'separate_items_with_commas' => 'Separate items with commas',
    'search_items'               => 'Search Items',
    'add_or_remove_items'        => 'Add or remove items',
    'choose_from_most_used'      => 'Choose from the most used items',
    'not_found'                  => 'Not Found',
);
$rewrite = array(
    'slug'                       => 'work-items',
    'with_front'                 => false,
    'hierarchical'               => true,
);
$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => false,
    'show_tagcloud'              => false,
    'rewrite'                    => $rewrite,
    'query_var'                  => 'work-categories',
);
register_taxonomy( 'work-categories', 'our_work', $args );
}
add_action('init', 'create_taxonomies');


/**
 * Add custom filters to replace categories in custom taxonomy paths
*/
add_filter('post_link', 'brand_permalink', 1, 3);
add_filter('post_type_link', 'brand_permalink', 1, 3);

function brand_permalink($permalink, $post_id, $leavename) {
if (strpos($permalink, '%work-categories%') === FALSE) return $permalink;

// Get post
$post = get_post($post_id);
if (!$post) return $permalink;

// Get taxonomy terms
$terms = wp_get_object_terms($post->ID, 'work-categories');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
    $taxonomy_slug = $terms[0]->slug;
else $taxonomy_slug = 'uncategorised';

return str_replace('%work-categories%', $taxonomy_slug, $permalink);
}

?>