Wordpress - Best way to detect if you are in a SINGLE POST page
I've tried to sort this out before for my own purposes. As far as I can tell ...
post_type
is not really set anywhere for thepost
post type.- For the
page
post type I only see the post type key inqueried_object
. - For CPT types there is a
post_type
key inquery_vars
and also inquery
. - Nav menus appear to behave like other CPTs in this respect.
The data is very inconsistent but if you eliminate pages and CPT's I believe you can assume the post
type.
Edit: Working code from @EricHolmes:
add_action( 'pre_get_posts', 'something_for_single_posts_only' ) ;
function something_for_single_posts_only( $query ) {
if( $query->is_main_query()
&& $query->is_singular()
&& ! $query->get( 'post_type' )
&& ! $query->is_page()
&& ! $query->is_attachment()
) {
// do something for single posts only.
}
}
We check for is_singular, no post type (CPTs have post_type
in query_vars
), not a page or attachment.