Come far funzionare wp-pagenavi su una query personalizzata basata sull'invio di un modulo?

2 lug 2012, 16:27:53
Visualizzazioni: 13.6K
Voti: 5

Ho pubblicato questo problema anche sui forum di supporto di WordPress, per il plugin wp-pagenavi di scribu:

http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1

La mia situazione:

Sto usando un modulo per creare una query personalizzata che mostra post da un archivio di post type personalizzato corrispondenti a un certo campo personalizzato (Es: Per "custom-post-type" mostra solo i post che hanno il valore "custom-field" selezionato dal modulo). Lo so, si chiama filtraggio :P

Il mio archivio di post type personalizzato è così:

www.example.com/custom-post-type-archive

(nota che uso l'impostazione permalink "nome articolo")

All'invio del modulo, il nuovo URL diventa:

www.example.com/custom-post-type-archive?key=value

La query personalizzata è impostata per mostrare solo i post con il valore value del campo personalizzato key:

$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);

Dopo il loop ho:

wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();

La query funziona, ottengo i risultati corretti. Ma ho problemi a far funzionare la paginazione. Quando vado alla pagina successiva, ottengo questo URL:

www.example.com/custom-post-type-archive/page/2?key=value

ma la paginazione mostra ancora come se fossi sulla prima pagina e i risultati sono gli stessi.

Se inserisco manualmente:

www.example.com/custom-post-type-archive?key=value&page=2

ottengo i risultati corretti (dalla pagina 2), ma tutti i link di navigazione sono uguali all'URL che ho inserito manualmente sopra.

Per favore aiutami (suggerimenti, risorse, qualsiasi cosa).

Grazie, Radu

4
Commenti

Anch'io ho un problema simile, hai trovato la soluzione? Puoi condividerla qui?

dev-jim dev-jim
24 ott 2012 17:21:28

Qualche soluzione per questo?

p.a. p.a.
5 nov 2012 19:45:35

@p.a, @tc.k, ho risolto il problema utilizzando il parametro paged (invece di page) in get_query_var e implementando la paginazione ajax come ha indicato @swtshweta. Penso che avrebbe funzionato anche senza ajax.

rereradu rereradu
6 nov 2012 21:03:34

Sì, la soluzione è decisamente usare paged invece di page come parametro (sto usando WP 3.3.2 e WP-pagenavi 2.82). Funziona senza la paginazione Ajax, anche se usare quella tecnica sembra fantastico :)

rereradu rereradu
6 nov 2012 21:10:28
Tutte le risposte alla domanda 6
0

Puoi provare a implementare una paginazione basata su AJAX per il plugin wp-pagenavi (vedi http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ come riferimento). Penso che questo risolverà il tuo problema.

6 nov 2012 11:03:33
0

Poiché questo argomento compare spesso nelle ricerche, vorrei sottolineare che WP Page Navi (a partire dalla versione 2.74) ora supporta query personalizzate.

Le FAQ di WP_Pagenavi rimandano al seguente articolo per spiegare come utilizzare il plugin Pagenavi con una query secondaria passando alla funzione wp_pagenavi() un parametro di query.

Dal tutorial:

$my_query = new WP_Query();

while ( $my_query->have_posts() ) : $my_query->the_post();
    the_title();
    // altro codice qui
endwhile;

wp_pagenavi( array( 'query' => $my_query ) );

wp_reset_postdata();    // per evitare errori più avanti nella pagina
27 ott 2013 16:39:44
0

Probabilmente il problema è già stato risolto qui: https://stackoverflow.com/a/13216165/1801379

Puoi anche trovare qualche idea qui: https://wordpress.stackexchange.com/a/4131/23290

6 nov 2012 10:25:58
0

Ecco le soluzioni che ho trovato (nota: sto utilizzando WP 3.3.2 e WP-Pagenavi 2.82):

Soluzione 1: Utilizzare paged invece di page come parametro per get_query_var.

Soluzione 2: Utilizzare una navigazione basata su ajax, come nell'articolo indicato da swtshweta. (utilizzando Ajax, la paginazione funziona correttamente anche con il parametro page).

6 nov 2012 22:08:54
2

Stranamente la risposta proposta non mostra nulla sul mio browser. Ho l'ultima versione di WP e l'ultima versione di Chrome. Grazie comunque.

Sebbene wp_pagenavi appaia correttamente, e i link mostrino /pagina2/, /pagina3/ e così via, e io abbia aggiunto l'attributo $paged o $page alla mia wp_query, appare sempre solo la prima pagina.

7 nov 2012 10:06:44
Commenti

stai chiamando correttamente la funzione wp_pagenavi: wp_pagenavi(array('query' => $your_custom_query)); ?

rereradu rereradu
7 nov 2012 16:07:09

Ho provato entrambi ma nessuno ha funzionato. Mi sono reso conto che la variabile $paged viene sempre inviata come vuota.

p.a. p.a.
12 nov 2012 09:39:14
1

Radu, La seguente soluzione ha funzionato per me: Ho modificato un codice standard di impaginazione, facendolo inviare "&page=xxx" e catturando $page come variabile di invio del form. Ora funziona perfettamente.

Nota l'ultima riga, è qui che sono avvenute le modifiche.

global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //qui catturo la pagina richiesta

function pagenavi( $found_posts, $p = 2 ) { // pagine mostrate prima e dopo la pagina corrente
  if ( is_singular() ) return; // non mostrare nelle pagine singole
  global $paged;
  $max_page =  intval($found_posts / 10) + 1;
  echo('max_page=' . $max_page);
  if ( $max_page == 1 ) return; // non mostrare quando c'è solo una pagina
  if ( empty( $paged ) ) $paged = 1;
  echo '<span class="pages">Pagina: ' . $paged . ' di ' . $max_page . ' <BR></span> '; // pagine
  if ( $paged > $p + 1 ) p_link( 1, 'Prima' );
  if ( $paged > $p + 2 ) echo '... ';
  for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Pagine centrali
    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, 'Ultima' );
}
 function p_link( $i, $title = '' ) {
  if ( $title == '' ) $title = "Pagina {$i}";
  echo "<a class='page-numbers' href='", esc_html( $_SERVER['REQUEST_URI'] . '&page=' .$i ), "' title='{$title}'>{$i}</a> ";

}

12 nov 2012 09:45:13
Commenti

<<Agli amministratori di stachexchange>> per favore considerate la mia risposta come risposta alla mia domanda con bounty. Le soluzioni proposte dai membri erano valide ma non hanno funzionato per me, poiché la soluzione proposta $paged = get_query_var('page'); risultava SEMPRE VUOTA per il mio sistema. Grazie.

p.a. p.a.
12 nov 2012 11:15:19