在Wordpress中使用动态多维数组meta_query

时间:2015-05-20 20:28:26

标签: php arrays wordpress multidimensional-array

我一直试图解决这个问题2天,并想知道是否有人可以给出一些指示/指导......

我从一个存储为数组的自定义字段中获取省份列表:

$userprovince = get_user_field ("s2_province_code");

使用print_r的输出:

数组([0] => MB [1] => NU)

现在,我想使用meta_query对key_'省'使用该值进行query_posts。我使用了$ userprovince并使用以下方法将其转换为多维数组:

for ($i=0; $i< count($userprovince); $i++)
{
    $count = count($arrays);
    $arrays[$count] = array(
                'key' => 'province',
                'value' => $userprovince[$i],
                'compare' => 'LIKE'
                );
}

使用print_r输出哪些输出:

数组([0] =&gt;数组([key] =&gt;省[value] =&gt; MB [比较] =&gt; LIKE)[1] =&gt;数组([key] =&gt;省[value] =&gt; NU [比较] =&gt; LIKE))

所以我按如下方式设置了我的查询:

$args = array(
'post_type'         => 'clientresource',
'post_status'       => 'publish',
'category_name' => 'employment-standards',
'meta_query'        => array(
    'relation'  => 'AND',
        $arrays,
        'relation'  => 'OR',
        array(
        'key'       => 'province',
        'value'     => 'All',
        'compare'   => 'LIKE'
    )
)); query_posts($args);

我的问题 - 它没有用。没有收集正确的记录。但是,如果我像这样手动设置省份:

$args = array(
'post_type'         => 'clientresource',
'post_status'       => 'publish',
'category_name' => 'employment-standards',
'meta_query'        => array(
    'relation'  => 'OR',
        array(
        'key'       => 'province',
        'value'     => 'NB',
        'compare'   => 'LIKE'
        ),
        array(
        'key'       => 'province',
        'value'     => 'NU',
        'compare'   => 'LIKE'
    ),
array(
        'key'       => 'province',
        'value'     => 'All',
        'compare'   => 'LIKE')
));query_posts($args);

它有效,我得到了预期的记录。

两个元查询之间的差异是:

工作:

[meta_query] =&gt;数组([关系] =&gt; OR [0] =&gt;数组([key] =&gt;省[value] =&gt; NB [比较] =&gt; LIKE)[1] =&gt;数组([key] =&gt;省[值] =&gt; NU [比较] =&gt; LIKE)[2] =&gt;数组([key] =&gt;省[value] =&gt;所有[比较] =&gt; LIKE)) )

不工作:

[meta_query] =&gt;数组([关系] =&gt; OR [0] =&gt;数组([0] =&gt;数组([键] =&gt;省[值] =&gt; MB [比较] =&gt; LIKE)[1] =&gt;数组([key] =&gt;省[value] =&gt; NU [比较] =&gt; LIKE))[1] =&gt;数组([key] =&gt;省[value] =&gt;全部[比较] =&gt; LIKE)))

我一直在努力的是如何在meta_query中输出我的数组,以便它包含与工作示例相同的结构?我尝试使用var_export输出它,但它保持不变。我也尝试过使用foreach来生成阵列,但我仍然无法获得它。

感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

我注意到元键总是省。为什么不尝试使用IN运算符。

文档说明了WP_META_QUERY类

的参数
/*
$key: Meta key to filter by.
$value: Meta value to filter by.
$compare: MySQL operator used for comparing the $value. 
Accepts '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN'...
*/

它实际默认为&#39; IN&#39;将数组作为值传递时

第953行。 https://developer.wordpress.org/reference/classes/wp_meta_query/

$user_province = array( 'NU', 'MB');

$args = array(
'post_type'         => 'clientresource',
'post_status'       => 'publish',
'category_name' => 'employment-standards',
'meta_query'        => array(
    'relation'  => 'OR',
        array(
        'key'       => 'province',
        'value'     => $user_province,
        'compare'   => 'IN'
        )
));

query_posts($args);

顺便说一句,WordPress还建议不要使用query_posts,因为它可以打破循环。最好的想法是使用pre_get_posts过滤器实现它。

另一种方法是为WP_Query类创建一个新实例。像

这样的东西
$args = array('Use the code above');
$customQuery = new WP_Query( $args );
while( $customQuery->have_posts() ){

    $customQuery->the_post()

}

进一步考虑,如果你想使用具有相同meta_key的多维数组,请尝试做这样的事情

首先,在$ arrays变量中设置all的关系。 然后是所有条件

$arrays = array( array( 'relation' => 'OR' ) );
for ($i=0; $i< count($userprovince); $i++)
{
    $count = count($arrays);
    $arrays[] = array(
                'key' => 'province',
                'value' => $userprovince[$i],
                'compare' => 'LIKE'
                );
}

最后将数组变量传递给您的参数

$args = array(
'post_type'         => 'clientresource',
'post_status'       => 'publish',
'category_name' => 'employment-standards',
'meta_query'        => $arrays,
); query_posts($args);

就个人而言,我不推荐这最后一个程序,因为查询可能会导致效率低下。

如果这对您有用,请告诉我。