Je dois maintenir la pagination pour une utilisation avec le défilement infini.
N'y a-t-il aucun moyen de demander à query_posts de récupérer les posts collants en premier?
Cela semble être un comportement par défaut sur un blog wordpress standard sur la page d'accueil, mais devient un peu gênant sur un modèle personnalisé pour une page de ce que je peux dire.
Je vous remercie.
Edité pour afficher la requête en cours:
query_posts( array(
'post_type' => array('post', 'careers-post'),
'paged' => $paged,
'posts_per_page' => 6,
'category__in' => $page_categories,
'ignore_sticky_posts' => 0
) );
Edit 2: On dirait que "category__in" est en conflit avec des posts collants datant de longtemps: http://wordpress.org/support/topic/category_in-ampamp- collant
Juste pour confirmer, supprimer "category__in" laisse effectivement les posts collants bouger comme prévu, mais ne résout évidemment pas le problème.
En fouillant dans le code source, je ne trouvais pas vraiment de logique étrange qui amènerait 'category__in' à briser le classement des résultats. Si vous le faites, vous pouvez également créer un bogue dans WordPress Trac .
Il est également difficile de reproduire ce type de problème, car il peut dépendre d'un autre problème spécifique à votre base de données ou de la manière dont les données ont été manipulées auparavant par du code personnalisé.
Quoi qu'il en soit, avec un peu d'effort, vous pouvez toujours contourner ce type de problème. Voici quelque chose qui va filtrer les résultats de votre requête et envoyer les posts collants au sommet:
add_filter('the_posts', 'bump_sticky_posts_to_top');
function bump_sticky_posts_to_top($posts) {
$stickies = array();
foreach($posts as $i => $post) {
if(is_sticky($post->ID)) {
$stickies[] = $post;
unset($posts[$i]);
}
}
return array_merge($stickies, $posts);
}
Étant donné que vous limitez la requête à 6 messages, je ne prévois aucun impact significatif sur le temps de traitement. Vous pouvez également mettre des contrôles supplémentaires à l'intérieur de la fonction pour que ce filtre ne s'exécute que lorsque vous utilisez cette requête spécifique (bien que si vous ne le réalisez pas, je peux imaginer que cela se produira, c'est doubler sur quelque chose qui WP a déjà fait).
J'espère que ça aide! Tiens nous au courant de comment ça se passe.