web-dev-qa-db-fra.com

Formulaire de recherche avancée avec filtres pour les taxonomies personnalisées

J'essaie de créer un formulaire de recherche complexe avec des filtres pour plusieurs taxonomies personnalisées, une entrée de termes de recherche et une sélection du nombre d'éléments affichés/page.

La question a déjà été postée sur . Formulaire de recherche avancée avec filtres pour les taxonomies personnalisées et les champs personnalisés . La réponse fournie par Brady était un excellent point de départ.

Je vais essayer de mon mieux pour expliquer la fonctionnalité, voici la source du modèle de page https://Gist.github.com/a82329d519c93d35f1f3

Fondamentalement, j'ai le type personnalisé "interview" et les 2 types "interview-type" et "interview-cat", qui auront des filtres à l'intérieur du formulaire.

Il existe actuellement 2 formes différentes, contenant toutes les deux des filtres de recherche: # search-filters, qui est le principal, et # type-filters, qui n'a que 3 boutons pour les valeurs de taxonomie 'custom-type'.

Ces deux formes fonctionnent comme je le souhaite, mais il reste quelques problèmes:

Le plus important est la pagination: la fonction mytheme_page_navi est identique au plugin WP-PageNavi, et le problème est que dès que je passe à la deuxième page, je perds toutes les valeurs du filtre et il affiche les posts du message écrit. '' interview-type '', 10 articles/page (quelles sont les valeurs par défaut, lorsque l'utilisateur arrive pour la première fois sur la page et qu'il n'a pas encore sélectionné d'options.) Pourquoi cela se produit-il?

De plus, un autre problème est que, parce que j'ai 2 formulaires, si j'entre des valeurs dans le principal et que je sélectionne ensuite le "type d'interview" dans les filtres de type #, toutes les valeurs de filtres précédentes sont supprimées.

En fin de compte, je serais reconnaissant si quelqu'un pouvait jeter un coup d'oeil sur le code et signaler ce que je fais mal. J'essaie de comprendre cela depuis des jours sans succès.

1
Andrew

Si vous perdez vos filtres, c'est parce que vous les avez passés par POST dans les formulaires. C'est bien, mais vous devrez stocker ces valeurs d'une manière ou d'une autre pour la pagination. Je pense que si vous avez utilisé GET, vous pouvez conserver les valeurs de la "page 2", mais les valeurs POST sont perdues dès que vous passez à la page suivante.

Vous pouvez stocker les éléments de recherche dans un cookie de session, forcer les valeurs POST pour la page paginée suivante, ou (ce que je recommande) utiliser GET à la place, ce n'est pas comme si les valeurs du filtre de recherche étaient si importantes.

$next_link = get_permalink();

Commencez par faire écho à la valeur get_permalink (), elle peut déjà conserver vos arguments actuels. Sinon, utilisez add_query_arg () pour les conserver.

$next_link = add_query_arg( 'paged', ((int)$_GET['paged'])+1), $next_link);
// Do this as many times as you need to
$next_link = add_query_arg( 'your_filter', $_GET['your_filter'], $next_link);
$next_link = add_query_arg( 'your_other_filter', $_GET['your_other_filter'], $next_link);
0
Eric Holmes