我目前有一个带有自定义字段“Name”的帖子列表,其中有几个帖子的“Name”值相同
我想检索一个帖子列表,所有帖子的“Name”值都是唯一的例如,帖子1和帖子2不能都是“迈克尔”
有没有办法在执行SQL查询之前直接修改它?我目前正在使用下面的功能(限制5篇帖子并随机排序)来更改查询。
function alter_the_query( $request ) {
$dummy_query = new WP_Query(); // the query isn\'t run if we don\'t pass any query vars
$dummy_query->parse_query( $request );
if ($dummy_query->is_category()) {
$request[\'posts_per_page\'] = 5;
$request[\'orderby\'] = \'rand\';
}
return $request;
}
为了与未来版本的Wordpress兼容,我试图避免直接使用SQL,但如果这是唯一的方法,那么我仍然愿意接受这些建议。
最合适的回答,由SO网友:moraleida 整理而成
如果您有多篇具有相同值的帖子,但您只希望最新的帖子具有任何值,只要值不重复,您最好在同一查询上运行两个循环:
/* Fetch all possible values - use this to order the
results and define which get selected */
$valueids = new WP_Query(array(
posts_per_page => -1,
meta_key => \'key\',
));
/* First loop, to build an array of ids with single values */
$values = array();
$ids = array();
while ($valueids->have_posts()) : $valueids->the_post();
$val = get_post_custom_values(\'key\');
if(!in_array($val,$values) {
$values[] = $val;
$ids[] = $post-ID;
}
endwhile;
$valueids->rewind_posts();
$valueids->set( \'posts_per_page\', 10 ) /* loop only for the ones you want */
/* Second loop, leaving out duplicated entries */
while ($valueids->have_posts()) : $valueids->the_post();
if(in_array($post->ID,$ids) {
// do you thing here
}
endwhile;
ps:这是未经测试的,但它应该正常工作。