Possible to change the URL for the regular post type without affecting the URL of other custom post types?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/13411

  •  16-10-2019
  •  | 
  •  

Question

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!

Was it helpful?

Solution

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

OTHER TIPS

Alternative - You can setup permanent 301 redirects. This will send people on to the correct link and keep your google juice intact. I don't know the answer to your specific question though.

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top