我有点被WP\\U查询代码卡住了。这是:
$args = array(
\'post_type\' => \'post\',
\'meta_query\'=> array(
\'key\' => \'karma\',
\'compare\' => \'>=\',
\'value\' => 0,
\'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篇+其余的帖子。
例如:9篇业力=150、133、100、100、100、100、100、100、33、11的帖子。
我想展示:150、133、100、100、100、33、11。(只允许3个业力=100的帖子)。
你知道如何做到这一点吗?也许是add_filter(\'posts_where\');
?
更新:好的,根据@s\\u ha\\u dum的回答,我成功了。这有点棘手,但结果有效;)
$args = array(
// Check for 9 last posts with karma = 100
\'post_type\' => \'post\',
\'meta_query\'=> array(
array(
\'key\' => \'karma\',
\'compare\' => \'=\',
\'value\' => 100,
\'type\' => \'numeric\'
)
),
\'posts_per_page\' => 9,
\'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)) {
$i = 0;
foreach ($karma_qry->posts as $p) {
$i++;
// Check for more than 3 posts with karma = 100
// Add them in the $dont_show_me array
if($i > 3){
$dont_show_me[] = $p->ID;
}
}
}
// Setup the final query that excluded addional posts with karma = 100
$args[\'meta_query\'][0][\'compare\'] = \'>=\';
$args[\'meta_query\'][0][\'value\'] = 0;
$args[\'post__not_in\'] = $dont_show_me;
$wp_query = new WP_Query($args);