最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Custom Post Type URL Rewriting?

programmeradmin2浏览0评论

I setup a custom post type for my portfolio projects. The main URL for this is located at /projects/

Now I've also setup my blog posts permalink to /articles/*/ for the permalink structure. This means when I go to view a portfolio project the URL changes to /articles/projects/project-name/

I know there must be a way to rewrite permalinks only for my projects custom post type. But I'm unfamiliar with the syntax in declaring the URL slug - would appreciate any help I can get!

I setup a custom post type for my portfolio projects. The main URL for this is located at /projects/

Now I've also setup my blog posts permalink to /articles/*/ for the permalink structure. This means when I go to view a portfolio project the URL changes to /articles/projects/project-name/

I know there must be a way to rewrite permalinks only for my projects custom post type. But I'm unfamiliar with the syntax in declaring the URL slug - would appreciate any help I can get!

Share Improve this question edited Jul 23, 2019 at 11:00 FaCE 5343 silver badges11 bronze badges asked May 25, 2012 at 15:47 JakeJake 5401 gold badge6 silver badges24 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 66

When you register the custom post type, you have to specify that the rewrite rule shouldn't be prepended with the existing URL structure.

In short, this means that this line in your register_post_type call:

'rewrite' => array('slug' => 'projects'),

should turn into this:

'rewrite' => array('slug' => 'projects','with_front' => false),

For more info, check out the rewrite argument from the codex entry on register_post_type

edit: just make sure that, after updating the code, you flush the rewrite rules by visiting Settings > Permalinks. Otherwise you'll still see the old links.

I had this problem literally 3 days ago, then I stumbled across a series over at wp.tutsplus.com. I swapped my own code out to accommodate your question better, but this is what I ended up with after following the series. Also, keep in mind that this is untested.

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

Theoretically, you could swap out whatever you want in the URL stored in the $projects_structure variable, what is there is just what I ended up using.

Good luck, and as always - make sure to come back and let us know how it worked out! :)

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论