WordPress查询:合并元键(数字)值并排序

时间:2020-04-30 作者:Nick

有很多great documentation 关于使用orderby 但是我似乎找不到一个好的WP_Query 此问题的解决方案。

每个帖子有两个元键:rating_aurating_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 或者运行多个查询并合并值。

很可能有一种完全不同的方法来解决这个问题。我们非常感谢您的建议!

1 个回复
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数组中使用命名的元查询。

相关推荐

如何将orderby与META_QUERY结合使用?

我想在通过特定的meta\\u键使用meta\\u查询过滤后,按视图对帖子进行排序。使用此查询,我可以按视图排序帖子,但我无法仅排序带有“meta\\u key”=>“my\\u choices”的帖子。$args = array( \'post_type\'=> \'post\', \'posts_per_page\'=> 24, \'meta_key\' => \'wpb_post_