Liens continus pour les articles précédents et suivants dans WordPress
Ce que j’ai, c’est une page qui affiche une publication d’une catégorie et en bas, il y a un lien de publication précédente et suivante. Le problème que j’ai est que lorsqu’il arrive au dernier, je veux revenir au début. Cela fonctionne jusqu’à la fin si vous êtes sur le premier, mais ne revenez pas au début si vous êtes sur le dernier, il affiche simplement le dernier message si vous êtes sur le dernier message.
Voici mon code jusqu’à présent :
<?php
$prev_post = get_adjacent_post( true, '', true );
$next_post = get_adjacent_post( true, '', false );
$prev_post_id = $prev_post->ID;
$next_post_id = $next_post->ID;
?>
<?php if ($prev_post_id == '') {
$query = new WP_Query( array ( 'orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4' ));
while($query->have_posts()):
$query->the_post();
$prev_post_id = $query->post->ID;
endwhile;
} ?>
<?php if ($next_post_id == '') {
$query2 = new WP_Query( array ( 'orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4' ));
while($query2->have_posts()):
$query2->the_post();
$next_post_id = $query2->post->ID;
endwhile;
} ?>
<a href="<?php echo get_permalink($prev_post_id); ?>" class="prev-footer-item">
<div class="prev-inner">
<h3 class="gamma"><?php echo get_the_title($prev_post_id ); ?></h3>
<h4 class="delta"><?php the_field('subtitle', $prev_post_id ); ?></h4>
<div class="footer-overlay"></div>
</div>
</a>
<a href="<?php echo get_permalink($next_post_id); ?>" class="next-footer-item">
<div class="next-inner">
<h3 class="gamma"><?php echo get_the_title($next_post_id); ?></h3>
<h4 class="delta"><?php the_field('subtitle', $next_post_id); ?></h4>
<div class="footer-overlay"></div>
</div>
</a>
Je suis sûr que c’est quelque chose d’assez évident qui me manque, n’est-ce pas ?
Mise à jour : messages précédents de travail :
[request] => SELECT SQL_CALC_FOUND_ROWS as1_posts.ID FROM as1_posts WHERE 1=1 AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private') ORDER BY as1_posts.post_date DESC LIMIT 0, 1
Ne fonctionne pas Messages suivants :
[request] => SELECT SQL_CALC_FOUND_ROWS as1_posts.ID FROM as1_posts WHERE 1=1 AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private') ORDER BY as1_posts.post_date DESC LIMIT 0, 1
Solution n°1 trouvée
Je ne vois rien qui me saute aux yeux, mais j’ai ajouté une if
déclaration à vos deux boucles (pour éviter les erreurs), ajoutée wp_reset_postdata()
après chaque boucle, et supprimé le besoin de $query
et $query2
– vous pouvez simplement utiliser $query
pour les deux si vous ne souhaitez pas utiliser les résultats de la requête pour autre chose que cela.
Une autre pensée – êtes-vous certains des get_adjacent_post()
retours ''
pour l’ID de publication s’il n’existe pas ? Pourrait-il être null
, ou '0'
par exemple. Cela vaut peut- être la peine d’être fait var_dump($next_post_id)
et vérifié.
Éditer
J’ai oublié de mentionner, get_adjacent_post()
suppose que le post_type
message adjacent est le même que celui que vous consultez actuellement. Je ne vois pas cela comme un problème cependant, comme vous l’avez déjà dit, cela fonctionne dans l’autre sens, mais c’est quelque chose à garder à l’esprit pour l’avenir.
<?php
if($prev_post_id === '') :
$query = new WP_Query(array('orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4'));
if($query->have_posts()) : while($query->have_posts()) :
$query->the_post();
$prev_post_id = get_the_ID();
endwhile;
endif;
wp_reset_postdata();
endif;
if($next_post_id === '') :
$query = new WP_Query(array('orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4'));
if($query->have_posts()) : while($query->have_posts()) :
$query->the_post();
$next_post_id = get_the_ID();
endwhile;
endif;
wp_reset_postdata();
endif;
?>
0 commentaire