我有以下问题。 在我的WordPress页面上有一些小粘贴帖子和一个大粘贴帖子,这一切都很好。但也有常规帖子,我不需要显示标记为粘性或大粘性的帖子与元值。
我需要查询值不为true或不存在home_post
键且值不为true或big_home_post
键不存在。
我提出的代码如下:
'meta_query' => array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'big_home_post',
'value' => true,
'compare' => '!='
),
array(
'key' => 'big_home_post',
'value' => true,
'compare' => 'NOT EXISTS'
),
),
array(
'relation' => 'OR',
array(
'key' => 'home_post',
'value' => true,
'compare' => '!='
),
array(
'key' => 'home_post',
'value' => true,
'compare' => 'NOT EXISTS'
),
),
),
代码无效。
可能多维数组没有正确构建,或者WordPress根本不支持。
感谢所有帮助
答案 0 :(得分:3)
无法在meta_query中使用嵌套数组。您需要为此编写自己的查询。我建议你按照代码来实现你的目标;
$query = new WP_Query( array(
'custom_meta_query_enabled' => true,
) );
add_filter( 'posts_join', 'custom_meta_query', 10, 2 );
function custom_meta_query( $join, $query ) {
if ( empty( $query->query_vars['custom_meta_query_enabled'] ) )
return $join;
global $wpdb;
$new_join = "
INNER JOIN {$wpdb->postmeta} wppm ON 1=1
AND wppm.post_id = {$wpdb->posts}.ID
AND (wppm.meta_key != 'big_home_post' OR (wppm.meta_key = 'big_home_post' AND wppm.meta_value != true)
AND (wppm.meta_key != 'home_post' OR (wppm.meta_key = 'home_post' AND wppm.meta_value != true)
";
return $join . ' ' . $new_join;
}
简单地说,我已经放了一个名为custom_meta_query_enabled
的控件。如果您将WP_Query
中的此字段设置为true,系统查询将被自定义连接查询覆盖。要使用此功能,您可以将其放在functions.php
答案 1 :(得分:2)
HüseyinBABAL的答案已经过时了。正如食品法典委员会所述:
从版本4.1开始,可以嵌套meta_query子句以构造复杂查询。
所以meta_query
这样的价值会起作用。