在wp_Query的$ args中执行错误的关系vlaue?

Esar-ul-haq Qasmi

我正在尝试为我的自定义插件和帖子类型获取数据表单数据库。我的查询参数应该像

$args = array(
    'post_type'  => 'products',
    'post_status'=> 'publish',
    'meta_query' => array(
       'relation' => 'OR',
      array( 'key'=>'product_commercial',
       'value'=>'on',
       'compare'=>'=' 
    ), 
      array( 'key'=>'product_exterior',
       'value'=>'on',
       'compare'=>'='    
    )
  )
);
$search_query = new WP_Query( $args );

但是我正在尝试动态添加元键值,例如:

$inner_arrays=array();
$count = 0;
foreach($values as $value){
if($value){

        $inner_arrays[$count]['key'] .= $value;
        $inner_arrays[$count]['value'] .= 'on';
        $inner_arrays[$count]['compare'] .= '=';
        $count++;
}
}

    $args = array(
    'post_type'  => 'products',
    'post_status'=> 'publish',
    'meta_query' => array(
       'relation' => 'OR',
    $inner_arrays
)
);

//值是一些随机值(例如从db获取)。

现在当我使用打印查询时 echo "<pre>Last SQL-Query: {$search_query->request}".'<br/>';

它显示

    Last SQL-Query: SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )  INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id )  INNER JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1  AND ( 
  ( 
    ( wp_postmeta.meta_key = 'product_commercial' AND CAST(wp_postmeta.meta_value AS CHAR) = 'on' ) 
    **AND** 
    ( mt1.meta_key = 'product_framed' AND CAST(mt1.meta_value AS CHAR) = 'on' ) 
    **AND** 
    ( mt2.meta_key = 'product_horizontal' AND CAST(mt2.meta_value AS CHAR) = 'on' )
  )
) AND wp_posts.post_type = 'products' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

问题:我正在使用“ relation => OR ”,但是在SQL查询中却得到“ AND ”。我在哪里做错了?

与一个

$args['meta_query'] 被分配以下内容:

array(
    'relation' => 'OR',
    $inner_arrays
)

如果要进行检查(例如通过进行检查)print_r( $args['meta_query'] );,则会看到:

Array 
    [relation] => OR 
    [0] => Array 
            [0] => Array 
                    key => product_commercial,
                    value => on,
                    compare => = 
                ),
            [1] => Array 
                    key => product_exterior,
                    值=>开启,
                    比较=> = 

换句话说,该$inner_arrays数组本身成为的子数组$args['meta_query']如“自定义字段参数”中所述

重要提示: meta_query需要一个数组元的查询参数的数组(它需要一个数组的数组) -你可以在下面的例子中看到这一点。通过此结构,您可以使用relation第一个(外部)数组中参数来描述元查询之间的布尔关系,从而查询多个元数据接受的参数为“ AND”,“ OR”。默认值为“ AND”。

因此要结合您的要素$inner_arrays使用默认的关系AND,而随后的结果相结合的与任何其他成员$args['meta_query'](没有任何)使用的明确关系OR

相反,您必须要么追加每个元素的$inner_arraysmeta_query,否则只设置$inner_arrays['relation'] = 'OR'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在WP_Query中包括子项

提取wp_query中的分类术语

使用带分页的 $wp_query 搜索错误的 URL

WP_Query在wordpress中并在结果中包含ACF

从 WP_Query 中的日期元查询中获取月份

限制WP_Query和WooCommerce产品查询中的帖子

在WP_Query中仅显示1个帖子

在WP_Query中限制Woocommerce特色产品

如何在 wordpress 中修改 wp_query

使用简单查询的wp_query中的无限循环

WP_Query中的自定义字段值

变量为 wp_query 中的 Post_type - Wordpress

在WP_Query中获取WooCommerce特色产品

在WP_Query中从Woocommerce产品预订获取sku

Wordpress:WP_Query 中的多个分类术语

如何仅在 WP_query 中列出未来事件?

使用WP_Query从WooCommerce中获取特定品牌的产品

如何在自定义`wp_new_user_notification`中运行`WP_Query`?

未捕获的错误:URL中找不到类“ WP_Query”-Wordpress

在单个模板页面上运行查询之前,更改$ wp_query args

在Woocommerce的WP_query中获取目录中可见的产品

使用 WP_Query 从 WooCommerce 中的订单 ID 数组中过滤订单

如何从多维数组中的 WP_Query 数组中获取发布数据?

通过WP_Query中的自定义Woocommerce产品排序来排序

比较以序列化数组形式存储的WP_Query中的meta_value

WordPress:如何在搜索结果中从$ wp_query获取所有帖子?

仅显示带有WP_Query的库存产品中的WooCommerce

将字符串比较为WP_Query中的数字

WP_Query以在Wordpress中按类别显示帖子(自定义帖子类型)