如何在wp_Query中联接两个相同的meta_key?

cnh2zyt3  于 2022-10-24  发布在  WordPress
关注(0)|答案(1)|浏览(182)

我正在尝试执行一个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来使用它。

uxh89sit

uxh89sit1#

所以我发现了Wordpress是如何为表格创建别名的。
它使用函数‘Find_Compatible_TABLE_ALIAS’,幸运的是用作过滤器‘META_QUERY_FIND_COMPATIBLE_TABLE_ALIAS’。
因此,如果您否决此过滤器,将不会使用相同的别名,关节也将不同。
我刚刚在某个地方使用了这个过滤器,它会起作用(但请注意,这会减慢查询速度):

function no_alias_filter ($alias) {
  return false;
}
add_filter('meta_query_find_compatible_table_alias', 'no_alias_filter');

相关问题