按元关键字日期分组WP_QUERY

时间:2014-06-23 作者:BoBoz

我有一个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();
?>

1 个回复
最合适的回答,由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]
        }
    }
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post