J'ai deux types de messages personnalisés qui traitent des noms de personnes. À l'heure actuelle, dans les vues de navigation, il les répertorie simplement par ordre alphabétique et la pagination les décompose en chiffres, ce qui n'est pas très utile lorsque vous essayez de trouver une personne spécifique.
Plus précisément, on m'a demandé de créer des liens de pagination pour les personnes qui ressemblent à ceci:
- AG
- HM
- NQ
- RQ
Mon problème - je ne peux pas comprendre comment je peux interroger les types de messages personnalisés par la première lettre d'un champ. Ensuite, je ne sais pas comment je peux créer la pagination de cette façon. Quelqu'un a-t'il des suggestions? Je vous remercie!
custom-post-types
pagination
mcleodm3
la source
la source
Réponses:
Question interessante! Je l'ai résolu en développant la
WHERE
requête avec un tas depost_title LIKE 'A%' OR post_title LIKE 'B%' ...
clauses. Vous pouvez également utiliser une expression régulière pour effectuer une recherche par plage, mais je pense que la base de données ne pourra alors pas utiliser d'index.C'est le cœur de la solution: un filtre sur la
WHERE
clause:Bien sûr, vous ne voulez pas autoriser une entrée externe aléatoire dans votre requête. C'est pourquoi j'ai une étape de nettoyage d'entrée
pre_get_posts
, qui convertit deux variables de requête en une plage valide. (Si vous trouvez un moyen de briser cela, veuillez laisser un commentaire afin que je puisse le corriger)La dernière étape consiste à créer une jolie règle de réécriture afin que vous puissiez accéder à
example.com/posts/a-g/
ouexample.com/posts/a
voir tous les messages commençant par cette (plage de) lettre (s).Vous pouvez modifier le modèle de règle de réécriture pour commencer par autre chose. S'il s'agit d'un type de publication personnalisé, assurez-vous d'ajouter
&post_type=your_custom_post_type
à la substitution (la deuxième chaîne, qui commence parindex.php
).L'ajout de liens de pagination est laissé comme exercice au lecteur :-)
la source
like_escape()
:)Cela vous aidera à démarrer. Je ne sais pas comment vous briseriez la requête à une lettre spécifique, puis diriez à WP qu'il y a une autre page avec plus de lettres, mais ce qui suit prend 99% du reste.
N'oubliez pas de poster votre solution!
la source
Une réponse en utilisant l'exemple de @ kaiser, avec un type de message personnalisé en tant que fonction acceptant les paramètres alpha de début et de fin. Cet exemple concerne évidemment une courte liste d'éléments, car il n'inclut pas la pagination secondaire. Je le poste pour que vous puissiez intégrer le concept dans votre
functions.php
si vous le souhaitez.la source
Voici une façon de le faire en utilisant les filtres
query_vars
etposts_where
:Souce: https://gist.github.com/3904986
la source
Ce n'est pas tant une réponse, mais plutôt un pointeur vers une direction à prendre. Cela devra probablement être 100% personnalisé - et sera très impliqué. Vous devrez créer une requête SQL personnalisée (à l'aide des classes wpdb), puis pour la pagination, vous passerez ces paramètres à votre requête personnalisée. Vous devrez probablement également créer de nouvelles règles de réécriture pour cela. Quelques fonctions à étudier:
la source