我有一个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]
        }
    }
}