J'utilise la fonction de lien suivant de WP pour afficher les liens de navigation suivants et précédents vers le "prochain message de la même catégorie", ce qui est bien avec ceci ... le problème que j'ai est que lorsque je suis dans le "dernier" post d'une catégorie, le lien "SUIVANT" apparaît quand même et fait ce que je ne veux pas: créer un lien vers une catégorie différente 1er post. la même chose avec le 1er post d'une catégorie, lorsque vous parcourez le premier post d'une catégorie, le lien "PRÉCÉDENT" apparaît et renvoie à un post précédent d'une autre catégorie ... Je voudrais que dans le premier et le dernier post, ce lien ne soit pas pas montré.
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php previous_post_linknext_post_link( '%link', '<span class="meta-nav">' .
_x( '◄ Previous', 'Previous post link','category' ,TRUE ) . '</span>' ); ?></div>
<div class="nav-next"><?php next_post_link( '%link', '<span class="meta-nav">' . _x( 'Next ► ', 'Next post link', 'category',TRUE ) . '</span>' ); ?> </div>
</div><!-- #nav-above -->
http://codex.wordpress.org/Function_Reference/next_post_link
Vous pouvez le faire en utilisant previous_post_link()
et next_post_link()
.
Ces fonctions créeront les liens pour vous et vous devriez pouvoir vous débarrasser de toute la logique que vous utilisez pour la pagination.
Si vous souhaitez uniquement créer un lien vers des publications de la même catégorie, vous devez utiliser les fonctions avec les paramètres suivants:
previous_post_link('« %link', '%title', true);
next_post_link('%link »', '%title', true);
En réponse à votre question mise à jour concernant votre problème de lien précédent/suivant lorsqu'il s'agit du premier/dernier message, veuillez consulter cette ligne du codex de previous_post_link()
et next_post_link()
= en relation avec le paramètre $in_same_term
:
Indique si le prochain article doit appartenir au même terme de taxonomie que l'article actuel. Si la valeur est 'true', seules les publications du terme de taxonomie actuel seront affichées. Si le message est à la fois dans la catégorie principale et la sous-catégorie, ou dans plus d'un terme, le lien du prochain message mènera au message suivant dans l'un de ces termes.
Dans cet esprit, je soupçonne que vos premières dernières publications peuvent être associées à plus d’une catégorie? Si tel est le cas, le filtre wp_get_object_terms
pourra peut-être vous aider.
Dans votre question initiale (pré-édition), vous recherchiez uniquement les publications de la toute première catégorie. Je vais donc appliquer cette logique ici:
<?php add_filter('wp_get_object_terms', 'my_custom_post_navigation', 4, 99); ?>
<div id="nav-above" class="navigation">
<div class="nav-previous">
<?php previous_post_link( '<span class="meta-nav"> %link </span>', _x( '◄ Previous', 'Previous post link', 'category') , TRUE ); ?>
</div>
<div class="nav-previous">
<?php next_post_link( '<span class="meta-nav"> %link </span>', _x( 'Next ►', 'Next post link', 'category') , TRUE ); ?>
</div>
</div><!-- #nav-above -->
<?php remove_filter('wp_get_object_terms', 'my_custom_post_navigation', 99); ?>
En plus de ce qui précède, vous devez placer ceci dans votre fichier functions.php :
/**
* Return only the first category when outputting the previous/next post links
*/
function my_custom_post_navigation($terms, $object_ids, $taxonomies, $args){
return array_slice($terms, 0, 1);
}
Copiez la page single.php de votre thème Parent et collez-la dans le répertoire de votre thème enfant. Ouvrez le fichier single.php à partir du répertoire child-theme et ajoutez le code suivant à la fin du fichier [before get_footer (); ]
<?php
$post_id = $post->ID; // Get current post ID
$cat = get_the_category();
$current_cat_id = $cat[0]->cat_ID; // Get current Category ID
$args = array('category'=>$current_cat_id,'orderby'=>'post_date','order'=> 'DESC');
$posts = get_posts($args);
// Get IDs of posts retrieved by get_posts function
$ids = array();
foreach ($posts as $thepost) {
$ids[] = $thepost->ID;
}
// Get and Echo the Previous and Next post link within same Category
$index = array_search($post->ID, $ids);
$prev_post = $ids[$index-1];
$next_post = $ids[$index+1];
?>
<?php if (!empty($prev_post)){ ?> <a class="previous-post" rel="prev" href="<?php echo get_permalink($prev_post) ?>"> <span class="meta-icon"><i class="fa fa-angle-left fa-lg"></i></span> Previous</a> <?php } ?>
<?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Next <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>
Après avoir ajouté ce code, collez le code suivant dans le fichier Style.css de votre thème enfant pour styliser les liens:
a.previous-post, a.next-post {
color: #fff;
background-color: #4498e7;
text-align: center;
height: 34px;
line-height: 34px;
font-size: 14px;
border: 1px solid;
padding: 0 20px;
margin-bottom: 30px;
text-transform: uppercase;
border-radius: 4px;
font-weight: bold;
}
a.previous-post:hover, a.next-post:hover {
color: #4498e7;
background-color: #fff;
}
a.previous-post {
float: left !important;
}
a.next-post {
float: right !important;
}
Laisse moi savoir les résultats :)
Si vous devez limiter le lien précédent ou suivant pour des taxonomies personnalisées spécifiques ou , type de message personnalisé , champ personnalisé ou format alors vous devriez essayer Ambrosite Next/Previous Post Link Plus . Ce plugin crée deux nouvelles balises de modèle - next_post_link_plus et previous_post_link_plus - qui sont versions améliorées du noyau WordPress next_post_link et previous_post_link balises de modèle.