A.meta_query
是数组的数组。看看examples in the the Codex.
$args = array(
\'post_type\' => \'my_custom_post_type\',
\'meta_key\' => \'age\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'age\',
\'value\' => array(3, 4),
\'compare\' => \'IN\',
)
)
);
$query = new WP_Query($args);
您所拥有的只是一个数组。这可能会引起麻烦。您要做的是:
$args = array(
\'post_type\' => \'post\',
\'meta_query\'=> array(
array(
\'key\' => \'karma\',
\'compare\' => \'>=\', // limit to "karma value = 100"
\'value\' => 0, // limit to "karma value = 100"
\'type\' => \'numeric\'
)
),
\'posts_per_page\' => 9,
\'meta_key\' => \'karma\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\',
\'post__not_in\' => $dont_show_me
);
然而,要解决问题本身,你不能像你需要的那样复杂地进行逻辑推理。。。
显示karma>=0的所有帖子(此代码可以正常工作)。但是如果有业力=100的帖子,只显示其中的3篇+其余的帖子。
。。。用一个WP_Query
. 这听起来像是你想要拉3个,而且只有3个,业力大于100的帖子,然后用其他任何东西来填充其余的帖子。这对于纯SQL来说是很棘手的。我认为这在SQL中是可能的,但我必须想很多才能确定,更不用说让它工作了。
我建议两个查询——一个是获取“大于100”的查询,另一个是获取其余的查询。
$dont_show_me = array(1);
$args = array(
\'post_type\' => \'post\',
\'meta_query\'=> array(
array(
\'key\' => \'karma\',
\'compare\' => \'>=\',
\'value\' => 100,
\'type\' => \'numeric\'
)
),
\'posts_per_page\' => 3,
\'meta_key\' => \'karma\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\',
\'post__not_in\' => $dont_show_me
);
$karma_qry = new WP_Query($args);
if (!empty($karma_qry->posts)) {
$args[\'posts_per_page\'] = 9 - $karma_qry->found_posts;
$args[\'meta_query\'][0][\'value\'] = 0;
foreach ($karma_qry->posts as $p) {
// assuming $dont_show_me is an array
$dont_show_me[] = $p->ID;
}
$args[\'post__not_in\'] = $dont_show_me;
} else {
$args[\'posts_per_page\'] = 9;
$args[\'meta_query\'][0][\'value\'] = 0;
}
$the_rest_qry = new WP_Query($args);
我无法测试,因为我没有你的
karma
我的服务器上的数据,但我相当肯定这是正确的。至少,这应该能让你走到最前面。