我已经想了2天了,想知道是否有人能给一些指点/指导…
我正在从存储为数组的自定义字段中获取省份列表:
$userprovince = get_user_field ("s2_province_code");
使用print_r的输出:
Array ([0] => MB [1] => NU)
现在我想使用该值对键='province'的meta_query来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输出:
Array ([0] => Array ([key] => province [value] => MB [compare] => LIKE) [1] => Array ([key] => province [value] => NU [compare] => 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] => Array ([relation] => OR [0] => Array ([key] => province [value] => NB [compare] => LIKE) [1] => Array ([key] => province [value] => NU [compare] => LIKE) [2] => Array ([key] => province [value] => All [compare] => LIKE))
不工作:
[meta_query] => Array ([relation] => OR [0] => Array ([0] => Array ([key] => province [value] => MB [compare] => LIKE) [1] => Array ([key] => province [value] => NU [compare] => LIKE)) [1] => Array ([key] => province [value] => All [compare] => LIKE))
我一直在努力的是如何在meta_query中输出我的数组,使其包含与工作示例相同的结构?我试过用var_export输出它,但它仍然是一样的。我也试过使用foreach在第一个地方生成数组,但我仍然无法得到它。
感谢您的阅读。
我注意到元键总是省。为什么不尝试使用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'...
*/
当你传入一个数组作为value
时,它实际上默认为'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变量中设置所有人的关系。那么所有的条件
$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);
我个人不推荐最后这个过程,因为查询可能会导致效率低下。让我知道这是否适合你。