‘Values’中的META_QUERY数组返回错误

时间:2018-03-18 作者:Ante Medic

我想在meta\\u查询中添加多个值。我在这个链接中找到了解决方案:

meta_query with multiple values

代码如下:

$meta_query_args = [
    [
        \'key\' => \'checkboxes\',
        \'value\' => [ \'"facebook"\', \'"twitter"\' ],
        \'compare\' => \'LIKE\',
    ],
];

$args = array(
    \'post_type\' => \'post\' ,
    \'meta_key\' => $meta_value,
    \'orderby\' => $sort . \' date\',
    \'order\' => $order_sort,
    \'posts_per_page\' => 10,
    \'cat\' => $category,
    \'paged\' => $paged,
    \'meta_query\' => $meta_query_args,   

);
但我有以下错误:

Warning: trim() expects parameter 1 to be string, array given in ...

如果有任何帮助,我将不胜感激。

非常感谢。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

LIKE 因为比较值对于数组没有意义。你想要的compare 未来IN. 此外,在values 无理由:

$meta_query_args = [
    [
        \'key\'     => \'checkboxes\',
        \'value\'   => [\'facebook\', \'twitter\'],
        \'compare\' => \'IN\',
    ],
];
编辑:因此,根据您的评论,您使用的是ACF,它将多个复选框存储为一个序列化数组。因此,需要对单个字符串使用多个LIKE查询。

$meta_query_args = [
    \'relation\' => \'OR\',
    [
        \'key\'     => \'checkboxes\',
        \'value\'   => \'"facebook"\',
        \'compare\' => \'LIKE\',
    ],
    [
        \'key\'     => \'checkboxes\',
        \'value\'   => \'"twitter"\',
        \'compare\' => \'LIKE\',
    ],
];
您的错误是试图将数组用作LIKE的值。要像查询多个可能的值一样进行查询,您需要使用OR 关系额外的引号是因为这是在序列化数组中真正查询特定值的唯一方法。

的元值checkboxes 如果选中Facebook和Twitter,则会出现如下情况:

a:2:{i:0;s:8:"facebook";i:1;s:7:"twitter";}
所以当你询问LIKE \'"facebook" 你在试图找到价值"facebook" 在这样的完整值内。引号是为了确保您不会错误地找到如下值not_facebook.

如果有很多值需要以这种方式查询,那么您的性能将非常糟糕。这是一种非常低效的存储此类查询数据的方法。

结束

相关推荐