web-dev-qa-db-fra.com

Affichage par jour

Actuellement, j'ai le code affiché ci-dessous.

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

Ce code affiche simplement TOUT message sur mon site Web, ce qui est cool et tout, mais je cherche à le porter au niveau suivant. Comment puis-je faire en sorte qu'il affiche poste par jour, par exemple.

 enter image description here 

Vous voyez dans le coin supérieur qu'il affiche la date du message. J'aimerais beaucoup que cela se fasse sur mon site Web, puis le limiter à une semaine, mais afficher chaque résultat dans un nouveau bloc.

3
Ritzy

Ceci est assez basique mais devrait vous aider sur votre chemin.

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

Juste pour expliquer le conditionnel. Au début, nous avons défini $previous_post_date sur 0. Cela signifie que la condition à l'intérieur de la boucle apparaîtra toujours vraie (c'est-à-dire que la date précédente ne correspond pas à la date actuelle) lors de la première "boucle" et affichera la date. La première vérification s'assure que nous ne générons pas une div de clôture, car un daily-block div n'existe pas encore.

Lorsque la valeur est true, le $previous_post_date est défini sur égal à $post_date afin que cette condition ne soit plus vraie lors de la lecture en boucle des publications du même jour. Une fois que vous atteignez une publication avec une date différente, le titre sera repris et la date précédente sera réinitialisée. Cette fois, il va fermer le daily-block div ouvert et en rouvrir un autre.

A la fin, nous vérifions si c'est la fin de la boucle et fermons le daily-block div.

Si vous avez besoin de plus amples précisions, faites le moi savoir.

Mise à jour des résultats de recherche

Pour que cela fonctionne sur une page de résultats de recherche, vous devez ajouter l'extrait de code suivant juste sous le tableau $args. J'ai mis à jour le fragment de code principal pour le montrer.

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

Cela vérifie l'URL d'une chaîne de requête de recherche, puis l'ajoute à la requête si elle est trouvée. N'oubliez pas que seuls les résultats de cette semaine seront affichés, mais en fonction du mot clé recherché.

2
Kieran McClung