So this may seem like a pretty menial thing, but follow me here.
I’m trying to add some logic through the pre_get_posts
action. This is the entire WP_Query object given to me. (see the end)
Things I have considered using:
is_single()
– too broad.is_singular()
– too early to use this, asget_queried_object()
is not yet set.$query->single
property – again too broad.$query->get('post_type')
– not set, as it’s using thename
property.
is name
really the only indicator here?
WP_Query Object
(
[query] => Array
(
[page] =>
[name] => abcs-of-mental-health
)
[query_vars] => Array
(
[page] =>
[name] => abcs-of-mental-health
[error] =>
[m] => 0
[p] => 0
[post_parent] =>
[subpost] =>
[subpost_id] =>
[attachment] =>
[attachment_id] => 0
[static] =>
[pagename] =>
[page_id] => 0
[second] =>
[minute] =>
[hour] =>
[day] => 0
[monthnum] => 0
[year] => 0
[w] => 0
[category_name] =>
[tag] =>
[cat] =>
[tag_id] =>
[author_name] =>
[feed] =>
[tb] =>
[paged] => 0
[comments_popup] =>
[meta_key] =>
[meta_value] =>
[preview] =>
[s] =>
[sentence] =>
[fields] =>
[menu_order] =>
[category__in] => Array
(
)
[category__not_in] => Array
(
)
[category__and] => Array
(
)
[post__in] => Array
(
)
[post__not_in] => Array
(
)
[tag__in] => Array
(
)
[tag__not_in] => Array
(
)
[tag__and] => Array
(
)
[tag_slug__in] => Array
(
)
[tag_slug__and] => Array
(
)
[post_parent__in] => Array
(
)
[post_parent__not_in] => Array
(
)
)
[tax_query] =>
[meta_query] =>
[queried_object] =>
[queried_object_id] => 0
[post_count] => 0
[current_post] => -1
[in_the_loop] =>
[comment_count] => 0
[current_comment] => -1
[found_posts] => 0
[max_num_pages] => 0
[max_num_comment_pages] => 0
[is_single] => 1
[is_preview] =>
[is_page] =>
[is_archive] =>
[is_date] =>
[is_year] =>
[is_month] =>
[is_day] =>
[is_time] =>
[is_author] =>
[is_category] =>
[is_tag] =>
[is_tax] =>
[is_search] =>
[is_feed] =>
[is_comment_feed] =>
[is_trackback] =>
[is_home] =>
[is_404] =>
[is_comments_popup] =>
[is_paged] =>
[is_admin] =>
[is_attachment] =>
[is_singular] => 1
[is_robots] =>
[is_posts_page] =>
[is_post_type_archive] =>
[query_vars_hash] => f473ebf7f725c2627dc5fd9a1429f626
[query_vars_changed] =>
[thumbnails_cached] =>
)
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.page
post type I only see the post type key inqueried_object
.post_type
key inquery_vars
and also inquery
.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:
We check for is_singular, no post type (CPTs have
post_type
inquery_vars
), not a page or attachment.I don’t know if this will be useful:
Use $wp_query->posts (array) to check the post type.
After some tests I see that unfortunately is impossible to get the post type of cpt inside
pre_get_posts
hook. Onlyis_page
works but not standard post type nor cpt can be retrieved there.If you have only page and post (no cpt) a check to
is_single()
withtrue
as response means that post type is post, because it return false for pages.If you have also CPTs I’m afraid you have to perform an additional query. The simplest I can think is just get the
post_type
column where post status is publish and post_name is the one required (skipping revisions):If you want to check a specific post type you can write a custom conditional tag that just count the rows with a given post_type and the given name:
Of course this is needed on
pre_get_post
, in any later hook you can useget_post_type()
…This is what I’m using, though it’s specialized for my own directory structure.
Mileage may vary. The strpos bits where I check that files are in one directory but not another would need to be modified for your build and could probably be re-factored more efficiently. They exist to cut out results above and below a certain directory structure.
Running thelist() in the footer will give you a numbered list of every .php template file used to compile the current view. It’s especially useful when dealing with a child theme that is rendering out a mystery component.