I’d like to use a custom post type archive as a site’s front page, so that
http://the_site.com/
is a custom post type archive displayed according to my archive-{post-type}.php
file.
Ideally I would like to alter the query using is_front_page()
in my functions.php
file. I tried the following, with a page called “Home” as my front page:
add_filter('pre_get_posts', 'my_get_posts');
function my_get_posts($query){
global $wp_the_query;
if(is_front_page()&&$wp_the_query===$query){
$query->set('post_type','album');
$query->set('posts_per_page',-1);
}
return $query;
}
but the front page is returning the content of “Home” and seems to be ignoring the custom query.
What am I doing wrong? Is there a better way, in general, of going about this?
After you have set a static page as your home page you can add this to your functions.php
and you are good to go. This will call the archive-POSTTYPE.php
template correctly as well.
add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
//Ensure this filter isn't applied to the admin area
if(is_admin()) {
return;
}
if($wp_query->get('page_id') == get_option('page_on_front')):
$wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE');
$wp_query->set('page_id', ''); //Empty
//Set properties that describe the page to reflect that
//we aren't really displaying a static page
$wp_query->is_page = 0;
$wp_query->is_singular = 0;
$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;
endif;
}