如果你看一下法典WP_Query
你会注意到orderby
is not a valid parameter for a meta_query
, nor is order
, and in fact nor is meta_key
.
但即使解决了,我也不认为你能做你想做的事WP_Query
. A.meta_query
是一个WHERE
子句元素,这使它成为一种搜索,我认为这不是您想要的。如果你所有的帖子都设置了这些键EXISTS
可能会让你有一部分的方法,但它会排除任何没有这些键的东西。类似这样:
\'meta_query\' => array(
array(
\'key\' => \'Rating\',
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'Number_persons\',
\'compare\' => \'EXISTS\'
)
)
但订购仍然是一个问题,我看不到解决方法,除了在
posts_orderby
.
function double_meta_posts_orderby($orderby) {
global $wpdb;
return " {$wpdb->postmeta}.meta_value, mt1.meta_value";
}
把这些放在一起。。。
$args = array(
\'post_type\' => \'hotel\',
\'Services\' => $Services,
\'Town\' => $Town,
\'meta_query\' => array(
array(
\'key\' => \'Number_persons\',
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'Rating\',
\'compare\' => \'EXISTS\'
),
)
);
add_filter(\'posts_orderby\',\'double_meta_posts_orderby\');
$query = new WP_Query( $args );
remove_filter(\'posts_orderby\',\'double_meta_posts_orderby\');
同样,只有当您的所有帖子都有那些meta\\u键时,这才有效。您可以使用
posts_joins
您可以自己加入元表,也可以删除
WHERE
包含的子句。。。
function kill_where($where) {
return \'\';
}
add_filter(\'posts_where\',\'kill_where\');
请注意,您正在添加过滤器,然后在查询运行后立即将其删除。如果您想避免这种需要,请查看
this answer 其他选项,或使过滤器自动删除。。。
function double_meta_posts_orderby($orderby) {
remove_filter(\'posts_orderby\',\'double_meta_posts_orderby\');
global $wpdb;
return " {$wpdb->postmeta}.meta_value, mt1.meta_value";
}