Pour un seul type de message personnalisé, j'utilise previous_post_link et next_post_link avec des flèches simples. (Bien que les flèches de texte soient montrées ici, dans la réalité, j'utilise des graphiques avec le texte masqué via CSS.) Code:
<nav class="arrowNav">
<div class="nav-previous">
<?php previous_post_link('%link', '«'); ?>
</div>
<div class="nav-next">
<?php next_post_link('%link', '»'); ?>
</div>
</nav>
Cela fonctionne très bien, sauf pour les cas Edge. J'aimerais que les articles soient bien entourés: c’est-à-dire que, pour le premier article, previous_post_link soit lié au dernier dernier article, et pour le dernier message next_post_link serait lié au premier message . Il semble que la valeur par défaut pour ces deux cas est null. Comment puis-je tester le statut du premier et du dernier message et créer des liens pour chacun?
Ajoutez les fonctions personnalisées suivantes dans le fichier functions.php et au lieu d’appeler les fonctions previous_post_link et next_post_link, appelez custom_next_post_link et custom_previous_post_link, respectivement.
function custom_adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true ) {
if ( $previous && is_attachment() )
$post = get_post( get_post()->post_parent );
else
$post = get_adjacent_post( $in_same_cat, $excluded_categories, $previous );
if ( ! $post ) {
$post = '';
$args = 'posts_per_page=1&orderby=date&ignore_sticky_posts=1';
if($previous)
$args .= '&order=DESC';
else
$args .= '&order=ASC';
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) :
$the_query->the_post();
$post = get_post(get_the_ID());
endwhile;
wp_reset_postdata();
}
$title = $post->post_title;
if ( empty( $post->post_title ) )
$title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
$title = apply_filters( 'the_title', $title, $post->ID );
$date = mysql2date( get_option( 'date_format' ), $post->post_date );
$rel = $previous ? 'prev' : 'next';
$string = '<a href="' . get_permalink( $post ) . '" rel="'.$rel.'">';
$inlink = str_replace( '%title', $title, $link );
$inlink = str_replace( '%date', $date, $inlink );
$inlink = $string . $inlink . '</a>';
$output = str_replace( '%link', $inlink, $format );
$adjacent = $previous ? 'previous' : 'next';
echo apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post );
}
function custom_previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') {
custom_adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true);
}
function custom_next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') {
custom_adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false);
}
La réponse acceptée fonctionne, mais probly aurait dû utiliser get_posts () à la place d'un wpquery et d'une boucle complets:
if ( ! $post ) {
$args = array('posts_per_page'=> 1,
'orderby'=> 'date',
'ignore_sticky_posts' => 1
);
if($previous)
$args['order']='DESC';
else
$args['order']='ASC';
$adjposts = get_posts($args);
$post = $adjposts[0];
}
Il est généralement mal vu d'utiliser wpquery si vous n'en avez pas besoin. Avec tout le crédit, sinon, à Vinod Dalvi.