这似乎是Wordpress中的一个bug。如果将orderby和meta\\u key指定为查询变量,Wordpress实际上会修改meta\\u查询。通常,此修改会将新的meta\\u键添加为meta\\u查询数组中的第一个数组,因此orderby将应用于meta\\u查询中指定的第一个meta键。
但是,当您在pre\\u get\\u posts过滤器中修改orderby、meta\\u key和meta\\u value query\\u vars时,由于Wordpress中的(在我看来)错误,它会在现有的元查询中添加新数组,但新数组不会作为第一个数组插入,而是附加到现有的元查询中。orderby总是应用于meta\\u查询中的第一个meta\\u键。
因此,在修复错误之前,可以在meta\\u查询中再次指定meta\\u键作为第一个数组,如下例所示:
add_filter( \'pre_get_posts\', \'my_get_posts\' );
function my_get_posts( $query ) {
if ( is_home() ) {
$query->set( \'post_type\', \'event\' );
$query->set( \'meta_key\', \'_start_date\' );
$query->set( \'orderby\', \'meta_value_num\' );
$query->set( \'order\', \'ASC\' );
$query->set( \'meta_query\', array(
array(
\'key\' => \'_start_date\'
),
array(
\'key\' => \'_end_date\',
\'value\' => time(),
\'compare\' => \'>=\',
\'type\' => \'numeric\'
)
));
}
return $query;
}