I’ve created a custom post, events
, and saved the meta data event_year
to each event. I’m trying to get a year’s event archive. When I go the the following URL, the meta_key
and meta_value
are not set for some reason, and thus the event archive is unfiltered.
/?post_type=events&meta_key=event_year&meta_value=2011
Debugging the values:
echo $wp_query->query_vars['post_type']; // 'events'
echo $wp_query->query_vars['meta_key']; // -blank-
echo $wp_query->query_vars['meta_value']; // -blank-
Why can’t I set the meta_key and meta_value?
The meta_values are saved to the events. I’ve successfully displayed them:
get_post_meta($post->ID, 'event_year', true); // '2011'
That’s because ‘meta_key’ and ‘meta_value’ are not public query vars. In other words, you can’t use them in URLs directly, nor should you.
Instead, register a specific query var, like so:
Then, you can go to a URL like this:
?my_qv=foobar
All you need to do now is map your query var to the actual query you want to do:
I can’t add a comment to the scribu’s excellent answer due to low reputation, but still the second part of the code (
map_my_qv
function) while working on WP 4.2 was giving me 404s, missing posts in admin and PHP notices about$meta_value
variable not set. Therefore, here’s the edited code: