【问题标题】:How can I join twice the same meta_key in a wp_query?如何在 wp_query 中加入两次相同的 meta_key?
【发布时间】:2022-10-24 06:54:30
【问题描述】:

我正在尝试执行 wp_query 并按以下规则对结果进行排序:

  • 普通帖子
  • 然后出现 'reseau = 48' => 是 tontouta
  • 然后通过出现'reseau = 171' => 是deroulant

预期的结果是每个帖子都没有 tontouta 也没有 deroulant 显示,然后是 deroulant,然后是 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 来使用它。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    所以我发现了 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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多