Pagination personnalisée sur un custom post type

Rédacté le 03/01/2012 WebDev

Tags:

WordPress propose depuis un bon moment le système des « custom post type » (aka les posts personnalisés).
Cette fonctionnalité permet principalement de créer des articles « spéciaux » (ex : film avec le casting complet, rendez-vous avec des dates et/ou lieux, etc …)

J’ai récemment utilisé les custom post types sur un projet, et j’avais besoin de faire une page de type archive (archive-MON_CUSTOM.php, dans le thème WP) affichant 3 éléments par page. Les articles « normaux » devant s’afficher en liste de 9 éléments.

Le souci :

WordPress m’affichait bien la première page (de mon archive de custom, soit archive-MON_CUSTOM.php) http://localhost/MON_CUSTOM/ , contenant bien 3 articles (max) et m’affichait une pagination correcte (nombre total de mes articles / nombre d’articles à afficher par page), mais la page 2 (et les suivantes) affichait une erreur 404…

Dans le détail de cette 404 (que j’obtiens grâce à l’extension debug-bar), je remarque que WP a trouvé la réécriture correcte, et tente d’afficher la page 2 de l’archive de mon custom post type, mais ne trouve aucun contenu.
C’est en examinant les requêtes MySQL que je remarque que WP tente de charger mes custom avec un offset de 9 (au lieu de 3), et comme j’avais créé seulement 5 articles, il ne trouvait rien (CQFD…).

En fait WP, au moment de la requête principale utilisait le réglage par défaut du blog, à savoir 9 articles par page…

Du coup, il fallait lui faire comprendre qu’on souhaite afficher 3 articles par page, lorsqu’on est dans l’archive du custom post type.

Comme je sais à quel point ce problème peut être chronophage à diagnostiquer/corriger, je vous offre le bout de code que j’ai créé pour me débloquer.

https://gist.github.com/1554288

Leave a Reply

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

Bienvenue sur mon blog.
Il s'agit avant tout d'une zone de veille pour moi, un lieu où je stocke les astuces qui me serviront à nouveau plus tard.
Au menu, du PHP, javascript, un peu de CSS et des astuces diverses...