web-dev-qa-db-fra.com

Pagination: Comment supprimer/page/x/après une action 'POST' sur un formulaire revenant à la page 1

J'ai la requête suivante, ce qu'il fait est d'obtenir une liste de "Livres" (type de message personnalisé). Cette liste est affichée sur une page comportant également un petit formulaire avec un menu déroulant contenant les termes "Editors" (taxonomie personnalisée). Lorsqu'un utilisateur choisit un "éditeur", il recharge la page et la requête renvoie les "livres" correspondants.

// Taxonomy query
$tax_query = array('relation' => 'AND');
if($_POST['editor']) array_Push($tax_query,array('taxonomy' => 't_editor','terms' => array($_POST['editor']),'field' => 'slug'));

// Pagination
if($_POST['reset_pagination'] || !get_query_var('paged')){
    $paged = 1;
}else if (get_query_var('paged')) {
    $paged = get_query_var('paged');
}

// Query
$myquery = array(
    'post_status' => 'publish',
    'post_type' => 'books',
    'orderby' => 'title',
    'order' => 'ASC',
    'tax_query' => $tax_query,
    'paged' => $paged
);

Comme il y a beaucoup de "Livres", j'utilise la pagination.

Maintenant, le problème. Disons que je suis sur la liste générale (non filtré par "Editeur"), j'ai 200 résultats, avec une pagination de dix par page. Supposons que je navigue jusqu'à la page 8. Ensuite, si je décide de filtrer mon choix par "Editeur", la page se recharge et affiche uniquement ces résultats. Le problème est que, comme je l’étais à la page 8, mon URL est associée à/page/8 /.

J'ai trouvé comment réinitialiser "paginé" sur 1 après un filtrage (avec un champ masqué "reset_pagination" sur le formulaire), cela fonctionne et j'ai les résultats de la page 1 après un filtrage, MAIS dans l'URL la pagination (/page/8 /) reste.

Comment puis-je supprimer "/ page/x /" de l'URL?

Edit: Voici le code du formulaire

<form action="" method="post" id="filter">
<ol>
    <li>
        <?php include(TEMPLATEPATH . '/includes/forms/filter_editors.php'); ?>
    </li>
    <li>
        <input type="hidden" name="reset_pagination" value="1"/>
        <input type="submit" class="submit" value="<?php _e('Ok'); ?>" />
    </li>
</ol>
1
mike23

Votre formulaire sera envoyé à l'URL spécifiée dans le paramètre action ou à la même URL si vous ne le spécifiez pas. Vous commencez à /books/page/8/, donc si votre paramètre action est vide, l’URL résultante sera également /books/page/8/. Remplissez simplement le paramètre action avec /books/ et cela devrait fonctionner.

2
Jan Fabry