The is_home()
conditional returns true when the currently displayed page is the blog posts index. If you want to target the site front page specifically instead, you need to use is_front_page()
:
function wpse83754_filter_pre_get_posts( $query ) {
if ( $query->is_main_query() && is_front_page() ) {
$query->set( 'post_type', array( 'home_portfolio' ) );
}
}
add_action( 'pre_get_posts', 'wpse83754_filter_pre_get_posts' );
Also, you don’t have to append $query->
to calls to is_home()
, is_front_page()
, etc. You do need to do so for is_main_query()
, since you want to ensure that the query being filtered is specifically the main query, since any given page will have multiple queries.
So, if you want to target a specific page, just call is_page( $id )
:
function wpse83754_filter_pre_get_posts( $query ) {
if ( $query->is_main_query() && is_page( $id ) ) {
$query->set( 'post_type', array( 'home_portfolio' ) );
}
}
add_action( 'pre_get_posts', 'wpse83754_filter_pre_get_posts' );