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

Posted

技术标签:

【中文标题】在 Wordpress meta_query 中使用动态多维数组【英文标题】:Using a dynamic multidimensional array in Wordpress meta_query 【发布时间】:2015-08-02 07:06:19 【问题描述】:

我已经尝试解决这个问题两天了,想知道是否有人可以提供一些指示/指导......

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

$userprovince = get_user_field ("s2_province_code");

使用 print_r 的输出:

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

现在我想使用 meta_query 对 key='province' 使用该值来查询_posts。我已经使用 $userprovince 并将其转换为多维数组:

for ($i=0; $i< count($userprovince); $i++)

    $count = count($arrays);
    $arrays[$count] = array(
                'key' => 'province',
                'value' => $userprovince[$i],
                'compare' => 'LIKE'
                );

哪些输出使用 print_r:

Array ( [0] => Array ( [key] => Province [value] => MB [compare] => LIKE ) [1] => Array ( [key] => Province [value] => NU [比较] => 喜欢 ) )

所以我的查询设置如下:

$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] => 数组 ( [relation] => OR [0] => 数组 ( [key] => 省 [value] => NB [compare] => LIKE ) [1] => 数组 ( [ key] => Province [value] => NU [compare] => LIKE ) [2] => Array ( [key] => Province [value] => All [compare] => LIKE ) ) )

不工作:

[meta_query] => 数组 ( [relation] => OR [0] => 数组 ( [0] => 数组 ( [key] => 省 [value] => MB [compare] => LIKE ) [ 1] => 数组 ( [key] => Province [value] => NU [compare] => LIKE ) ) [1] => Array ( [key] => Province [value] => All [compare] =>喜欢 ) ) )

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

感谢您的阅读。

【问题讨论】:

【参考方案1】:

我注意到元键始终是省。为什么不尝试使用 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'...
*/

当您将数组作为值传递时,它实际上默认为 'IN'

第 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);

我个人不推荐最后一个过程,因为查询可能导致效率低下。

让我知道这是否适合您。

【讨论】:

以上是关于在 Wordpress meta_query 中使用动态多维数组的主要内容,如果未能解决你的问题,请参考以下文章

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

在wordpress中使图像响应?

php 在编辑器中使所有Wordpress图像路径相对

Wordpress - 在类别存档中使用 wp_query - 如何显示适当的类别?

php 在WP中使用meta_query和date

如何向 meta_query 添加过滤器,例如仅查找 Roma Numeric