merging meta_query into archive pages
-
The backstory:
I have created a custom field named
meta_city
that lists all tags in a drop down, and allows the user to select one. So for example, the existing tag “Toronto” can be assigned to themeta_city
field while also remaining available as a standard tag. This is all fine.On the tag archive page though, only posts that have been tagged are being shown; the
meta_city
assignments are being ignored. Again, expected. But I want the posts with themeta_city
assignment to show up for a given tag too.So after reading the docs, I created code to modify the main query object via the
pre_get_posts
filter, like so:add_action( 'pre_get_posts', 'md_modify_tag_archive_to_include_acf_fields' ); function md_modify_tag_archive_to_include_acf_fields( $query ) { if( $query->is_main_query() && $query->is_tag ) { $term_name = $query->query[tag]; $term = get_term_by('name',$term_name, 'post_tag'); $meta_query = array( 'relation' => 'OR', array( 'key' => 'meta_city', // name of custom field 'value' => $term->term_id, 'compare' => 'LIKE' ) ); $query->meta_query = $meta_query; $query->tax_query->relation = 'OR'; } }
So now the tag archive page displays posts with the term:
- tagged;
- tagged + assigned to
meta_city
but not, crucially, untagged and assigned to
meta_city
(or IOW assigned only).Is there a way to achieve what I’m after?
- The topic ‘merging meta_query into archive pages’ is closed to new replies.