How to make a category page the blog home page?

The question:

I want to use a category page as the home page of my blog. Is that possible and how can I do it? It tried it with a .htacces rewrite rule but that didn’t worked.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Update

Eliminating all of the other solutions, there is at least one remaining: template_redirect:

function wpse121308_redirect_homepage() {
    // Check for blog posts index
    // NOT site front page, 
    // which would be is_front_page()
    if ( is_home() ) {
        wp_redirect( get_category_link( $id ) );
        exit();
    }
}
add_action( 'template_redirect', 'wpse121308_redirect_homepage' );

You will need to pass the appropriate category $id, of course.

The benefit of redirecting at template_redirect is that you only get one template-load taking place, rather than a second redirect after the template loads.

Note that you can hook into the process even earlier, such as at pre_get_posts, thereby potentially saving an entire query request:

add_action( 'pre_get_posts', 'wpse121308_redirect_homepage' );

Original Answer

If all you want to do is display a specific category on the blog posts index, you can accomplish that with a simple filter of the main $wp_query at pre_get_posts:

function wpse1862_pre_get_posts( $query ) {
    // Only modify the main query
    // on the blog posts index page
    if ( is_home() && $query->is_main_query() ) {
        $query->set( 'category_name', 'category-slug-here' );
    }
}
add_action( 'pre_get_posts', 'wpse1862_pre_get_posts' );

If you want to modify the template, then you can do one of two things:

  1. Create a home.php with the desired markup
  2. Use template_redirect or home_template to force WordPress to include your category.php template.

Edit

And if you want the blog posts index URL to look like:

www.example.com/main

Then you can use a Static Front Page, and assign a static page called “main” as your blog posts index.

And if this is your objective:

I really want the redirect. I want the home page (http://example.com/) to redirect to the category page (which looks like http://example.com/main/)

…then the accepted answer is correct for your use case.

Method 2

Category page can’t be home page (just doesn’t work like that).

There are two other options:

  1. Limit home page to posts from specific category (close but not the same thing).
  2. Redirect home page to actual category page.

Since you seem fine with redirect try following. Create home.php template in your theme directory with following content:

<?php
wp_redirect( 'http://www.yoursite.com/category/category-slug' );
?>

There is probably some more tidy way to do this with hooks, but nothing I can think of right now.

Method 3

The most semantic way to do this instead of using a redirect (extra connection time) is to create a custom page template.

new page:

/* Template Name: New Homepage by Cat */

<?php query_posts('cat_id'=>'3');?>
<--insert loop-->

Method 4

just add a category filter into your index.php query in your template. simples

Method 5

If you want to redirect to a particular category i.e category id 3
then copy the content from category.php and make another template like category-3.php
After that

    * Template Name: New Homepage by Cat 3*/

    <?php query_posts('cat_id'=>'3');?>
    <--insert loop-->

In wordpress reading we need to set home as posts page and for home page select the New Homepage by Cat 3 as a template.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment