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.

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.


2 Answers 2


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' ),
    ) );
  • Hi this code changed my URL but pagination not working.
    – dh47
    Aug 10, 2016 at 11:42
  • That works well for me, thanks. Note that it creates double "Posts" menu item but the content is same and works so all is well. I removed it with JS snippet. @dh47 I had no issues with pagination.
    – dsomnus
    Oct 19, 2016 at 17:09
  • Yes this fixes the URL but breaks pagination, @dsomnus what pagination functions were you using to maintain the pagination working?
    – Someone
    Dec 13, 2019 at 16:40

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' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.