web-dev-qa-db-ja.com

1日あたりの投稿を表示する

現在、私は以下のコードを表示しています。

<?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(); ?>

このコードは私のウェブサイトにすべての投稿を表示するだけです。これは素晴らしいことですが、私は次のレベルに進むことを目指しています。たとえば、1日あたりの投稿数が表示されるようにするにはどうすればよいですか。

enter image description here 

あなたはそれが投稿の日付を表示している上の隅に見ます、私はそれが私のウェブサイト上でこれをすることを望みます、そして1週間に制限しますが、それぞれの結果を新しいブロックに表示します。

3
Ritzy

これはとても基本的なことですが、途中であなたを助けてくれるでしょう。

//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に設定しています。これは、ループ内の条件が最初の「ループ」で常に真になり(つまり、前の日付が現在の日付と一致しない)、日付を出力することを意味します。最初のチェックでは、daily-block divがまだ存在しないため、最後のdivを出力しないようにしています。

Trueの場合、$previous_post_date$post_dateと等しくなるように設定して、同じ日の投稿をループしている間にこの条件が正しくならないようにします。別の日付の投稿に到達すると、タイトルを出力して前の日付をもう一度リセットします。今度は、開いているdaily-block divを閉じて、もう一度開きます。

最後に、ループの終わりかどうかを確認し、daily-block divを閉じます。

さらに説明が必要な場合は、私に知らせてください。

検索結果の更新

これが検索結果ページで機能するには、$args配列のすぐ下に次のコードの断片を追加する必要があります。これを表示するようにメインコードスニペットを更新しました。

if ( isset( $_GET['s'] ) ) {
    $args['s'] = $_GET['s'];
}

それは、検索クエリ文字列のURLを確認し、見つかった場合はそれをクエリに追加することです。これは今週の結果のみを表示しますが、検索されたキーワードに基づいています。

2
Kieran McClung