web-dev-qa-db-fra.com

Comment faire en sorte que wp-pagenavi fonctionne sur une requête personnalisée créée à partir d'une soumission de formulaire?

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

5
rereradu

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.

3
swtshweta

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
3
helgatheviking

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

1
Babar

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).

1
rereradu

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> ";

}

0
p.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.

0
p.a.