The Dilemma
I have a few custom post types:
- Portfolio Items
- Testimonials
- FAQs
The URL structures for these custom post types are:
- mysite.com/portfolio/name-of-custom-post
- mysite.com/testimonial/name-of-custom-post
- mysite.com/faq/name-of-custom-post
I’d like to use the normal, built-in WordPress post type to control our blog entries, and have the URL for each blog entry be like this:
- mysite.com/blog/name-of-post
If I go to Settings > Permalinks and adjust the URL structure to be like…
/blog/%postname%/
…then the URLs for all of my post types are affected, which results in:
- mysite.com/blog/portfolio/name-of-custom-post
- mysite.com/blog/testimonial/name-of-custom-post
- etc…
The Question
What I’d like to know — is it possible to adjust the URL structure for the built-in WordPress post type without affecting the URL structure of other custom post types?
The only other way I see to solve my dilemma is to create another custom post type called “Blog.” This seems wasteful, because then I won’t be using the built-in WordPress post type at all.
If anyone needs it, The Why
If anyone wonders why I need “blog” in the URL so badly, it’s because we’re merging our blog into the same install as our site, and want to keep the URLs intact so we don’t lose valuable Google juice.
Any help is greatly appreciated — thanks!
2 s
You could do this on custom post type registration.
1) Set your default permalink in the WordPress admin to your desired structure e.g.:
/blog/%postname%
2) Add the “slug” and “with_front” parameter to the rewrite-array in the register_post_type function. “slug” must be the name of your post-type.
$args = array(
// ...
'rewrite' => array(
'slug' => 'your_post_type',
'with_front' => false
),
// ...
);
register_post_type('your_post_type',$args);
This should generate the following rewrite-rules:
Default Post: http://example.com/blog/%postname% Default Page: http://example.com/%postname% Custom Post Type: http://example.com/your_post_type/%postname%
EDIT
The “slug” parameter is optional. If you don’t set it, the name of your custom post type is used. Check out the function reference about register_post_type:
http://codex.wordpress.org/Function_Reference/register_post_type