Displaying post per day

时间:2016-01-26 作者:Ritzy

目前,我有下面显示的代码。

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 
    <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
        <a class="vissted" href="<?php the_permalink(); ?>">
            <div class="hovereffect">
                <div class="thumbnail">
                    <?php the_post_thumbnail(\'singles\', array( \'class\'  => "img-responsive")); ?>
                    <div class="overlay">
                        <h2><?php the_title(); ?></h2>
                    </div>
                    <div class="caption">
                        <div class="ratings">
                            <p class="pull-right"> </p>
                            <p>
                               Watch Video
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </a>
    </div>
<?php endwhile; else : ?>
    <p>
        <?php _e( \'Sorry, no posts matched your criteria.\' ); ?>
    </p>
<?php endif; ?>
<?php wp_reset_query(); ?>
这段代码只显示了我网站上的每一篇文章,这很酷,但我希望将其提升到下一个层次。例如,我如何使其显示每天的帖子。

enter image description here

你可以看到,在顶部的角落里,它显示了帖子的日期,我希望它在我的网站上这样做,然后限制为1周,但在一个新的块中显示每个结果。

1 个回复
最合适的回答,由SO网友:Kieran McClung 整理而成

这是非常基本的,但应该会帮助你的方式。

//Get posts for the current week
$args = array(
    \'date_query\' => array(
        array(
            \'year\' => date( \'Y\' ),
            \'week\' => date( \'W\' ),
        )
    )
);

//Check for search query
if ( isset( $_GET[\'s\'] ) ) {
    $args[\'s\'] = $_GET[\'s\'];
}

//Create these variables for use later
$i = 0;
$previous_post_date = 0;

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :

    //Get the total amount of posts based on the query
    $count = $the_query->found_posts;

    while ( $the_query->have_posts() ) : $the_query->the_post();

        //Get post date
        $post_date = get_the_time(\'M j, Y\');

        //Where the magic happens, see below for explanation
        if ( $previous_post_date !== $post_date ) {

            //If not the first time close div as a daily-block isn\'t created until the 2nd loop
            if ( $previous_post_date !== 0 ) {
                    echo \'</div>\';
            }

            $previous_post_date = $post_date;
            echo \'<div class="daily-block">\' . $post_date;
        } ?>

        <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
            <a class="vissted" href="<?php the_permalink(); ?>">
                <div class="hovereffect">
                    <div class="thumbnail">
                        <?php the_post_thumbnail( \'singles\', array( \'class\'  => "img-responsive" ) ); ?>
                        <div class="overlay">
                            <?php the_title( \'<h2>\', \'</h2>\' ); ?>
                        </div>
                        <div class="caption">
                            <div class="ratings">
                                <p class="pull-right"> </p>
                                <p>Watch Video</p>
                            </div>
                        </div>
                    </div>
                </div>
            </a>
        </div>

        <?php
        //Increment $i
        $i++;
        //Check if it\'s the end of the loop (i.e. $i = found_posts)
        if ( $i == $count ) {
            echo \'</div>\';
        } ?>

    <?php endwhile; else : ?>
        <p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
    <?php endif;
wp_reset_postdata(); ?>
只是为了解释条件。开始时,我们设定$previous_post_date0. 这意味着循环中的条件在第一个“循环”中始终显示为真(即前一个日期与当前日期不匹配),并将输出日期。第一次检查确保我们没有输出结束div 作为daily-block div尚不存在。

如果为true,则设置$previous_post_date 等于$post_date 这样,当在同一天的帖子中循环时,这个条件就不再是真的了。一旦你到达一个日期不同的帖子,它将输出标题并再次重置之前的日期。这一次它将关闭打开的daily-block div并重新打开另一个。

最后,我们检查是否是循环的结束,并关闭daily-block 部门。

如果你需要进一步的澄清,请告诉我。

Update for search results

要在搜索结果页面上执行此操作,您需要在$args 阵列我已经更新了主代码段来显示这一点

if ( isset( $_GET[\'s\'] ) ) {
    $args[\'s\'] = $_GET[\'s\'];
}
这样做的目的是检查URL中的搜索查询字符串,如果找到,则将其添加到查询中。请记住,这仍将仅显示本周的结果,但基于搜索的关键字。