我正在尝试执行一个wp_Query,并按照以下规则对结果进行排序:
- 正常开机自检
- 然后出现‘reseau=48’=>is_tontouta
- 然后出现‘reseau=171’=>is_deroulant
预期的结果是,每个帖子都不会有Tontouta,也不会有无助的表现,然后是无心,然后是Tontouta。
问题是wp_Query生成的请求使用相同的别名连接了两个相同的表:
OR
( mt1.meta_key = 'reseau_cf' AND mt1.meta_value = '48' )
OR
( mt1.meta_key = 'reseau_cf' AND mt1.meta_value = '171' )
我希望第二个加入是(但这可能不是正确的方式):
( mt2.meta_key = 'reseau_cf' AND mt2.meta_value = '171' )
以下是实际查询(为便于提问而简化):
'post_type' => 'panneaux',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => [
'relation' => 'AND',
[
'relation' => 'OR',
[
'key' => 'quartier',
'compare' => 'exists',
],
'is_tontouta' => [
'key' => 'reseau',
'compare' => '=',
'value' => 48,
],
'is_deroulant' => [
'key' => 'reseau',
'compare' => '=',
'value' => 171,
],
],
[
'key' => 'actif',
'value' => 1,
],
],
'orderby' => [
'is_deroulant' => 'DSC',
'is_tontouta' => 'DSC',
],
在这种情况下,我不能使用自定义查询,因为我们使用的是WP GRID Builder插件,我们需要使用WP_Query来使用它。
1条答案
按热度按时间uxh89sit1#
所以我发现了Wordpress是如何为表格创建别名的。
它使用函数‘Find_Compatible_TABLE_ALIAS’,幸运的是用作过滤器‘META_QUERY_FIND_COMPATIBLE_TABLE_ALIAS’。
因此,如果您否决此过滤器,将不会使用相同的别名,关节也将不同。
我刚刚在某个地方使用了这个过滤器,它会起作用(但请注意,这会减慢查询速度):