var_dump
你的$args
参数:
array(4) {
["cat"]=>
string(7) "2,39,30"
["orderby"]=>
string(14) "meta_value_num"
["order"]=>
string(4) "DESC"
["meta_key"]=>
string(12) "album_rating"
}
第二次使用密钥时,会覆盖第一次。不能这样构建阵列。
这个orderby
参数将采用空格分隔的字符串,因此这更接近:
$args = array(
\'cat\' => \'2,39,30\',
\'orderby\' => \'title meta_value_num\',
\'order\' => \'ASC\',
\'meta_key\' => \'album_rating\',
\'order\' => \'DESC\'
);
但与之前一样,您不能使用同一个键两次,并且仍在尝试使用
order
两次如果查看SQL,您将看到只使用最后一个值,并且它应用于最后一个
orderby
价值
ORDER BY wp_posts.post_title,wp_postmeta.meta_value+0 DESC LIMIT 0, 1
更接近。。。
$args = array(
\'cat\' => \'2,39,30\',
\'orderby\' => \'title meta_value_num\',
\'meta_key\' => \'album_rating\',
\'order\' => \'DESC\'
);
这可能会让你得到你想要的。当然,您需要一个过滤器:
function alter_order_wpse_117098($orderby) {
remove_action(\'posts_orderby\',\'alter_order_wpse_117098\');
$order = str_replace(\',\',\' ASC, \',$orderby);
return $order;
}
add_action(
\'posts_orderby\',
\'alter_order_wpse_117098\'
);
在有问题的查询之前添加该筛选器。它将自行删除,因此不应打乱任何其他查询。