有很多great documentation 关于使用orderby
但是我似乎找不到一个好的WP_Query
此问题的解决方案。
每个帖子有两个元键:rating_au
和rating_overall
.
我想通过查询帖子rating_au
作为优先事项,然后回落到rating_overall
如果没有值rating_au
存在。
Example Table
| post ID | rating_au | rating_overall |
|---------|-----------|----------------|
| 1 | | 80 |
| 2 | 90 | 75 |
| 3 | | 70 |
Example Output
<我得到了以下查询:
$args = [
\'posts_per_page\' => 5,
\'post_type\' => \'post\',
\'meta_query\' => [
\'relation\' => \'OR\',
\'rating_au_clause\' => [
\'key\' => \'rating_au\',
\'compare\' => \'EXISTS\'
],
\'rating_overall_clause\' => [
\'key\' => \'rating_overall\',
\'compare\' => \'EXISTS\'
]
],
\'orderby\' => \'rating_au_clause rating_overall_clause\',
\'order\' => \'DESC\'
];
我想我可能误解了这是如何翻译成MySQL的,但它并没有产生预期的结果(它只是列出了
rating_overall
).
我绞尽脑汁想避免$wpdb
或者运行多个查询并合并值。
很可能有一种完全不同的方法来解决这个问题。我们非常感谢您的建议!
SO网友:dyg
我想这就是你想要的语法:
$args = [
\'posts_per_page\' => 5,
\'post_type\' => \'post\',
\'meta_query\' => [
\'relation\' => \'OR\',
\'rating_au_clause\' => [
\'key\' => \'rating_au\',
\'compare\' => \'EXISTS\'
],
\'rating_overall_clause\' => [
\'key\' => \'rating_overall\',
\'compare\' => \'EXISTS\'
]
],
\'orderby\' => [
\'rating_au_clause\' => \'ASC\',
\'rating_overall_clause\' => \'DESC\',
],
];
这是一个细微的区别,但在orderby数组中使用命名的元查询。