Come far funzionare wp-pagenavi su una query personalizzata basata sull'invio di un modulo?
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

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.

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

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

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

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.

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

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