我有以下问题。在我的WordPress页面上,有小的粘性帖子和一个大的粘性帖子,这一切都很好。但是也有常规的帖子,我需要不显示那些被标记为粘性或大粘性的帖子。
我需要查询home_post
键值不为真或不存在,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根本不支持。
感谢所有帮助
不能在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
hseyin BABAL的答案已经过时了。如法典所述:
从4.1版本开始,可以嵌套meta_query子句来构造复杂的查询。
所以meta_query
的值,如问题将工作。
法典:自定义字段参数