So I have several CPTs set up but I want to have all my default posts listed under /blog.

I was hoping I could somehow enable has_archive for the default post type but I have yet to succeed.

Any ideas?

add_action( 'init', 'enhance_post' );

function enhance_post( ) {
    global $wp_post_types;

    $wp_post_types['post']->has_archive = true;
    $wp_post_types['post']->rewrite = array(
        'slug' => 'blog',
        'with_front' => 0,
        'pages' => 1,

(the above doesn't seem to work)

2 Answers 2


You can change front page and designate another as blog via Reading settings.

See Creating a Static Front Page in Codex.


You can use the below code

add_action( 'init', function () {
    $post_type = 'post';
    $post_type_object = get_post_type_object( $post_type);
    $post_type_object->has_archive = 'true';
    $post_type_object->rewrite = array(
        'slug' => '<YOUR_SLUG>',

    register_post_type($post_type, $post_type_object);
} );

and in addition to that, you can add rewrite rules to handle that :

add_rewrite_rule( '^<YOUR_SLUG>$','index.php?post_type=post','top' );
add_rewrite_rule( '^<YOUR_SLUG>/page/([0-9]{1,})/?$','index.php?post_type=post&paged=$matches[1]','top' );
  • the first and only technique i found that works !! Thanks !!
    – rafa226
    Feb 1 at 9:55

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.