J'ai également posté ceci sur les forums de support wordpress, pour le plugin wp-pagenavi de scribu:
http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1
Ma situation:
J'utilise un formulaire pour créer une requête personnalisée qui affiche les publications d'une archive de type de publication personnalisée correspondant à un certain champ personnalisé. forme). Je sais, ça s'appelle filtrer: P
Mon archive de type de message personnalisé ressemble à ceci:
www.example.com/custom-post-type-archive
(notez que j'utilise le paramètre de permalien "post name")
Lors de la soumission du formulaire, la nouvelle URL est la suivante:
www.example.com/custom-post-type-archive?key=value
La requête personnalisée est configurée pour afficher uniquement les publications avec valeur de clé champ personnalisé:
$value = $_GET['value'];
$paged = get_query_var('page');
$args = array(
'post_type' => 'custom-post-type',
'meta_key' => 'key',
'meta_value' => $value,
'paged' => $paged,
'posts_per_page' => 10
);
$my_query = new WP_Query($args);
Après la boucle j'ai:
wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();
La requête fonctionne, j'obtiens les bons résultats. Mais j'ai du mal à faire fonctionner la pagination. Quand je vais à la page suivante, j'obtiens cette URL:
www.example.com/custom-post-type-archive/page/2?key=value
mais la pagination montre toujours que je suis sur la première page et les résultats sont les mêmes.
Si j'entre manuellement:
www.example.com/custom-post-type-archive?key=value&page=2
J'obtiens les bons résultats (à partir de la page 2), mais tous les liens de navigation sont les mêmes que l'URL que j'ai saisie manuellement ci-dessus.
S'il vous plaît aider (astuces, ressources, n'importe quoi).
Thx, Radu
Vous pouvez essayer d'implémenter une pagination basée sur ajax pour le plugin wp-pagenavi (voir http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ pour référence). Je pense que cela résoudra votre problème.
Parce que cela revient dans la recherche, je voudrais souligner que WP Page Navi (à partir de la version 2.74) prend désormais en charge les requêtes personnalisées.
Le WP_Pagenavi FAQ renvoie à l'article suivant pour expliquer comment utiliser le plug-in Pagenavi avec une requête secondaire en transmettant à la fonction wp_pagenavi()
un paramètre de requête.
Du tutoriel:
$my_query = new WP_Query();
while ( $my_query->have_posts() ) : $my_query->the_post();
the_title();
// more stuff here
endwhile;
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_postdata(); // avoid errors further down the page
Le problème a probablement déjà été résolu ici: https://stackoverflow.com/a/13216165/1801379
Vous pouvez également avoir une idée d’ici: https://wordpress.stackexchange.com/a/4131/23290
Voici les solutions que j'ai trouvées (remarque: j'utilise WP 3.3.2 et WP-Pagenavi 2.82):
Solution 1: Utilisation de paged
au lieu de page
comme paramètre get_query_var
.
Solution 2 Utilisation de la navigation basée sur ajax, comme dans l'article que swtshweta a souligné. (avec Ajax, la pagination fonctionne correctement même avec le paramètre page
).
Radu, la solution suivante a fonctionné pour moi: j'ai modifié un code de pagination standard, je l'ai fait soumettre "& page = xxx" et j'ai capturé $ page comme variable de soumission de formulaire. Cela fonctionne maintenant parfaitement.
Notez la dernière ligne, c'est ici que des modifications ont eu lieu.
global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //this is where I catch the requested page
function pagenavi( $found_posts, $p = 2 ) { // pages will be show before and after current page
if ( is_singular() ) return; // don't show in single page
global $paged;
$max_page = intval($found_posts / 10) + 1;
echo('max_page=' . $max_page);
if ( $max_page == 1 ) return; // don't show when only one page
if ( empty( $paged ) ) $paged = 1;
echo '<span class="pages">Page: ' . $paged . ' of ' . $max_page . ' <BR></span> '; // pages
if ( $paged > $p + 1 ) p_link( 1, 'First' );
if ( $paged > $p + 2 ) echo '... ';
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Middle pages
if ( $i > 0 && $i <= $max_page ) $i == $paged ? print "<span class='page-numbers current'>{$i}</span> " : p_link( $i );
}
if ( $paged < $max_page - $p - 1 ) echo '... ';
if ( $paged < $max_page - $p ) p_link( $max_page, 'Last' );
}
function p_link( $i, $title = '' ) {
if ( $title == '' ) $title = "Page {$i}";
echo "<a class='page-numbers' href='", esc_html( $_SERVER['REQUEST_URI'] . '&page=' .$i ), "' title='{$title}'>{$i}</a> ";
}
Étrangement, la réponse proposée ne montre rien sur mon navigateur. J'ai le dernier WP et le dernier navigateur Chrome. Merci quand même.
Bien que wp_pagenavi apparaisse correctement et que les liens affichent/page2 /,/page3/etc., et que j’ai ajouté l’attribut $ paged ou $ page à mon wp_query, la première page est toujours affichée.