meta_query'比较'=>'IN'不起作用


14

首先,我知道这是重复的,但是较旧的答案都没有帮助。

我正在通过中搜索帖子post_meta。这是我的代码,目前不返回任何内容。

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

如果我删除meta_query它的作品。我确信这些事情:

  • key或中没有拼写错误value
  • 帖子类型为 post
  • 还有就是在“system_power_supply”值“单”后。但是,帖子字段是由高级自定义字段生成的。

system_power_supply序列化了吗?
Howdy_McGee

是的。这是postmeta表中的值 a:1:{i:0;s:6:"single";}
Rizwan 2015年

2
好,这就是您的问题,元查询不适用于序列化数据。如果您在此站点上搜索查询序列化数据,则会找到一些答案,但是没有一种方法是理想的。
米洛2015年

Answers:


13

在元查询中没有简单的方法来搜索序列化的值。如果值列表不是很长,那么可能会设置多个元查询:

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

或者,如果您想获得超级赞,可以动态设置它:

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}

谢谢你,兄弟 我不能告诉你我已经解决了多大的头痛。
Rizwan 2015年

顺便说一句,如果我们无法通过meta_query查询,为什么meta_value包含序列化数据?这是wordpress的错误吗?
Rizwan 2015年

1
我是女人,不是“兄弟”,但没问题。由于“高级自定义字段”保存数据的方式,因此meta_value包含序列化的数据。当然,这并不理想。

1
哈哈,我向夫人道歉。第二和第三很好,没有尝试第一个。
Rizwan 2015年

2
您可以删除第一个,但不起作用
Toskan

4

我知道已经很长时间了,但是以防万一有人遇到同样的问题。好吧,我已经花了好几个小时才发现问题:带有“ IN”比较运算符的“ meta_query”似乎不接受通常的数组。相反,您需要先使用','将其加入。

因此,在您的情况下,类似这样的方法应该起作用:

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;

在WP 5中,您可以将数组直接传递给value键。如果将其内插到字符串中,则wp如何将字符串拆分成该IN()部分的片段,可能会得到意外的结果。例如,'this that', 'and', 'that'变成'this','that','and','that'-因此,最好给它数组。
香蕉,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.