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.
4 Answers
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.
-
Sorry, no. 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/
), because I the categories are 'Editions' (by country) on the site and the default is US (main). I wish I could edit the bounty description to make this clear.– its_meCommented Nov 5, 2013 at 14:22 -
You can edit the question to make that clear. And if your question is that much different from the OP, you should have asked your own question, rather than placing a bounty on this one. And: why do you want a redirect, specifically? A redirect is an implementation, not an end goal. Describe what you're actually trying to accomplish. A redirect may or may not be the only or best implementation. Commented Nov 5, 2013 at 14:23
-
Chip, the reason/use case may be different, but the question is exactly the same, which is why I avoided another question. And as you can see, a similar answer has already been posted (although using
query_posts
, a less recommended method).– its_meCommented Nov 5, 2013 at 14:24
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.
-
Thanks, that's what I was searching for. WP should really document all those special PHP files better (like the maintenance.php). Commented Sep 15, 2010 at 18:59
-
2Just be aware that this almost doubles server load for home page. WP core runs twice. Might be important factor if you have decent amount of visitors.– RarstCommented Sep 15, 2010 at 19:06
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-->
-
Yup, this is the one. Upload this template to your theme. Add a new page, set template to "New Homepage by Cat". The go to settings > reading > choose 'a static page' > front page = New Homepage by Cat... and your done...– inTOWNCommented Nov 7, 2013 at 18:30
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.