Custom permalink structure only for default posts

Does anybody know how to modify the url struct only for the single post page?

When I go to a post page, the url should look like: example.com/xxx/my-post. All other urls (with the exception of the single post pages) should not contain “xxx” in the url.

Read More

Customizing the permalink settings would add xxx in front of taxonomies and categories as well, so that wouldn’t work for what I need.

Essentially, I want that all “post” and “events” urls co contain an extra “xxx” segment in the structure.

Related posts

Leave a Reply

2 comments

  1. The solution is to reregister the default post type just after WordPress, and to add a rewrite slug. Also, the _builtin param needs to be set to false.

    add_action( 'init', 'my_new_default_post_type', 1 );
    function my_new_default_post_type() {
    
        register_post_type( 'post', array(
            'labels' => array(
                'name_admin_bar' => _x( 'Post', 'add new on admin bar' ),
            ),
            'public'  => true,
            '_builtin' => false, 
            '_edit_link' => 'post.php?post=%d', 
            'capability_type' => 'post',
            'map_meta_cap' => true,
            'hierarchical' => false,
            'rewrite' => array( 'slug' => 'post' ),
            'query_var' => false,
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
        ) );
    }
    
  2. Another method without the potential side-effects of registering a new post type is to modify the rewrite rules to remove the permalink front.

    function wpa37911_permastructs(){
        global $wp_rewrite;
        $wp_rewrite->extra_permastructs['category']['struct'] = '/category/%category%';
        $wp_rewrite->extra_permastructs['post_tag']['struct'] = '/tag/%post_tag%';
    }
    add_action( 'init', 'wpa37911_permastructs' );