我已经创建了一个自定义帖子,events
, 并保存了元数据event_year
对每个事件。我想得到一年的活动档案。当我转到以下URL时meta_key
和meta_value
由于某种原因未设置,因此未过滤事件存档。
/?post_type=events&meta_key=event_year&meta_value=2011
调试值:
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?
meta\\u值保存到事件中。我已成功显示它们:
get_post_meta($post->ID, \'event_year\', true); // \'2011\'
最合适的回答,由SO网友:scribu 整理而成
这是因为“meta\\u key”和“meta\\u value”不是公共查询变量。换句话说,你不能直接在URL中使用它们,你也不应该这样。
相反,请注册一个特定的查询变量,如下所示:
function register_my_qv() {
global $wp;
$wp->add_query_var( \'my_qv\' );
}
add_action( \'init\', \'register_my_qv\' );
然后,您可以转到如下URL:
?my_qv=foobar
现在需要做的就是将查询变量映射到要执行的实际查询:
function map_my_qv( $wp_query ) {
if ( $meta_value = $wp_query->get( \'my_qv\' ) ) {
$wp_query->set( \'meta_key\', \'some_meta_key\' );
$wp_query->set( \'meta_value\', $meta_value );
}
}
add_action( \'parse_query\', \'map_my_qv\' );
SO网友:certainlyakey
由于声誉不高,我无法对scribu的优秀答案添加评论,但仍然是代码的第二部分(map_my_qv
函数)在处理WP 4.2时,给了我404s,在admin和PHP中丢失了关于$meta_value
未设置变量。因此,以下是经过编辑的代码:
function map_my_qv( $wp_query ) {
if ( is_admin() || ! $wp_query->is_main_query() )
return;
if ( $wp_query->get( \'my_qv1\' ) ) {
$wp_query->set( \'meta_key\', \'my_meta_key1\' );
$wp_query->set( \'meta_value\', $wp_query->get( \'my_qv1\' ) );
}
if ( $wp_query->get( \'my_qv2\' ) ) {
$wp_query->set( \'meta_key\', \'my_meta_key2\' );
$wp_query->set( \'meta_value\', $wp_query->get( \'my_qv2\' ) );
}
}
add_action( \'parse_query\', \'map_my_qv\' );