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:
- Create a
home.php
with the desired markup - Use
template_redirect
orhome_template
to force WordPress to include yourcategory.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 likehttp://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:
- Limit home page to posts from specific category (close but not the same thing).
- 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