我有一个wp\\u查询,它列出了自定义帖子类型中的帖子,按自定义字段“时间”排序。
我想将此列表按另一个自定义字段“date”分组,以便每个具有相同自定义字段“date”的帖子都列在该日期的下方。我事先不知道这些日期。
输出如下:
日期x—第3次发布—第6次发布—第8次发布
日期y-职位1-职位4
日期z-2-5-7-9
以下是我当前的WP\\U查询:
<?php
// WP_Query arguments
$args = array (
\'post_type\' => \'movie\',
\'posts_per_page\' => \'50\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'ASC\',
\'meta_key\' => \'time\',
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo "<li><a href=\'".get_permalink()."\'>";
echo "<div class=\'xyz\'>".get_the_title()."</div>";
echo "</a></li>";
$vbrand = get_post_meta( get_the_id(), \'brand\', true );
$vyear = get_post_meta( get_the_id(), \'year\', true );
$vtime = get_post_meta( get_the_id(), \'time\', true );
echo "<p>".$vbrand;
echo "<p>".$vyear;
echo "<p>".$vtime;
}
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
最合适的回答,由SO网友:engelen 整理而成
解决这个问题的一个好方法是首先获取所有按日期排序的帖子,然后对它们进行分组。
正如您所述time
自定义字段的格式为Y-m-d
, 因此,您可以使用orderby => \'meta_value\'
(不是meta_value_num
, 与当前一样,将值强制转换为数字类型)。
接下来,如果要为每个不同的日期输出标题,可以存储上次显示的日期,如果下一篇文章与该日期不同,则可以输出该日期(并更改存储的日期)。这将产生类似的结果:
$dategroup = \'\';
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
// Fetch date for current post
$postdate = get_post_meta( get_the_ID(), \'time\', true );
// Check if the post date differs from the current date
if ( $postdate != $dategroup ) {
// In that case, this is a new date that hasn\'t yet been displayed
// So, we output the title...
echo \'<h3>\' . $postdate . \'</h3>\';
// ...and change the stored date for the current group
$dategroup = $postdate;
[your output stuff]
}
}
}