J'essaie de modifier le nombre de posts_per_page dans la boucle. Par ici:
function posts_per_page($query) {
$query->query_vars['posts_per_page'] = 3;
}
add_filter('pre_get_posts', 'posts_per_page', 11);
Le problème que j'ai, c’est que, lorsque je le fais, des posts collants apparaissent deux fois dans la boucle: le premier au début de la boucle et le second dans leur position initiale. Donc dans ce cas, la première page a 4 posts (3 de boucle sans sticky + le post collant), et le post collant apparaîtra (encore) plus tard dans sa "page" avec 2 autres posts.
EDIT: SOLUTION
Après avoir fait beaucoup de recherches, j'ai réalisé que les messages collants apparaissent toujours sur la première page. Si le message collant d'origine était déjà dans la première page, seul le texte collant apparaît (ce message n'en apparaîtra qu'un). J'avais besoin de savoir exactement combien de messages ma requête comporterait, mais $ wp_query-> found_posts ne comptait pas les messages collants. Et si je faisais ceci, $ wp_query-> found_posts + get_option ('sticky_posts') ne serait pas correct car il ne prend pas en compte le 'postage persistant de la première page' et compte également les postés non publiés.
Avec $ wp_query-> posts, je reçois le nombre réel de posts sur ma première page, donc:
$sticky = count($wp_query->posts) - get_option( 'posts_per_page' );
if ($sticky<0) {$sticky=0;}//In case there is only one page of results
Maintenant, $ sticky aura le nombre réel de posts collants.
Ce que vous décrivez n’est pas un problème mais un comportement normal de WordPress. Lorsque vous marquez une publication comme post-it, elle se trouve en haut de la liste et , elle apparaît également dans sa publication d'origine, à moins que la position d'origine ne se trouve sur la première page. Un sticky apparaîtra en haut des publications et dans sa position d'origine, mais il n'apparaîtra pas deux fois sur la même page.
Vous voudrez peut-être faire quelque chose comme ça:
<?php
while (have_posts()) : the_post();
if ( !in_array( $post->ID, $do_not_duplicate ) ) { // check IDs
// display posts ...
the_title();
//store id in "do not duplicate
$do_not_duplicate = $post->ID;
}
endwhile;
?>
source avec modification mineure: http://wpengineer.com/1719/filter-duplicate-posts-in-the-loop/
Plus correct serait d'utiliser la méthode set
.
function posts_per_page($query) {
$query->set('posts_per_page',3);
}
add_filter('pre_get_posts', 'posts_per_page', 11);
Essayez ça.
Remarque: je ne peux pas reproduire ce problème persistant. Si cela ne résout pas le problème, modifiez votre question plus en détail. Cela peut être spécifique à un thème ou dû à un plugin.