How to remove /blog/ prefix for custom post types in permalinks?

I have a client that used to have a static website and a blog powered from WordPress under the /blog subdirectory. Now he decided to move everything into WordPress so that he can also create and edit pages easily. However because the website is getting a lot of traffic and he already has likes, tweets and +1 in every blog post he wants to keep his blog under the website.com/blog. I thought it was as easy as heading over the permalinks and add /blog/%postname%/ in the permalink structure.

What the problem is right now is that I have a created a few custom post types to accommodate the needs of his content and custom post type’s content resides now under the blog virtual directory.

Read More

How can I specify that only the blog posts and the blog categories must be under the /blog virtual directory and everything else can use the permalink structure of /%postname%/.

This is my custom post type

register_post_type( 'vm_products',
    array(
        'labels' => array(
            'name' => __( 'Products' ),
            'singular_name' => __( 'New product' ), //in the horizontal bar when you are logged in.
            'add_new' => __('Add new product'),
            'add_new_item' => __('New product'),
            'edit_item' => __('Edit product'),
            'new_item' => __('New product'),
            'view_item' => __('Show all products'),
            'search_items' => __('Search product'),
            'not_found' =>  __('No products found'),
            'not_found_in_trash' => __('No products found in trash'), 
            'parent_item_colon' => '',
            'menu_name' => 'Products'
        ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => true, 
    'show_ui' => true,
    'supports' => array( 'title', 'custom-fields', 'editor', 'thumbnail'),
    'rewrite' => array('slug' => 'product'),
    'taxonomies' => array('vm_product_cats')
    )
);

Related posts

Leave a Reply

2 comments

  1. Extend the 'rewrite' argument to suppress the first URL part:

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

    But using just %postname% for different post types is really tricky and error prone. Avoid it.