我想创建一个循环来创建一个请求WP_meta_query(来源:https://codex.wordpress.org/Class_Reference/WP_Meta_Query),但我很难得到预期的结果。
以下是上下文:人们可以搜索搜索表单中的帖子。我还通过magic-field-2插件在帖子上设置了自定义字段。当人们搜索时,他们可以写一些东西并检查一些复选框以获得更准确的结果。
我发现管理此操作的最简单方法是从搜索中提取数据并执行WP_meta_query以找到我需要的内容。
此类搜索的实际语法如下所示:
query_args = array( 'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'foo_key',
// 'value' => 'foo',
// 'compare' => 'LIKE',
),
array(
'key' => 'bar_key',
),
) );
$meta_query = new WP_Meta_Query();
$meta_query->parse_query_vars( $query_args );
$mq_sql = $meta_query->get_sql(
'post',
$wpdb->posts,
'ID',
null
);
正如我在我的主题中所说,我正在尝试从搜索结果中循环并重新创建类似的数组。
首先,我将数组分成两部分。
Array ( [s] => John )
Array ( [enseignant] => on [travailleur] => on )
一个中的搜索词和另一个中的复选框。正如你所看到的,我在“enseignant”和“travailleur”中搜索John
为了解决问题,我在这种查询中包装了所有内容:
$requete = array();
$i = 0;
foreach($les_cases as $key => $value) {
$requete[] = array('key'=>$key, 'value' => $le_terme_de_la_recherche['s'], 'compare'=>'IN');
$i++;
}
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation' => 'OR',
$requete
)
);
当我打印我的请求时,会显示如下内容:
Array
(
[0] => Array
(
[key] => enseignant
[value] => John
[compare] => IN
)
[1] => Array
(
[key] => travailleur
[value] => John
[compare] => IN
)
)
Array
(
[post_type] => post
[meta_query] => Array
(
[relation] => OR
[0] => Array
(
[0] => Array
(
[key] => enseignant
[value] => John
[compare] => IN
)
[1] => Array
(
[key] => travailleur
[value] => John
[compare] => IN
)
)
)
)
你看到我的数组中有很多[0],我怀疑这会在我的查询中产生一些错误。
毕竟,如果我希望能够选择部分数据,我应该比较 LIKE , IN 或 = 。例如,如果我写约翰,它就能给我John Doe。
如果有人可以帮助我管理这个难题,我会很优雅。
答案 0 :(得分:2)
meta_query中有一个额外的数组。
而不是做
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation' => 'OR',
$requete
)
);
试
$args = array(
'post_type' => 'post',
'meta_query' => array_merge( // merge instead of pushing a new array
array( 'relation' => 'OR' ), // this must be an array
$requete
)
);
当然,确保你的元键是正确的 (顺便说一句,[0]只是数组键,你不能没有键的数组)。