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.
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.
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é.