De ce nu funcționează wp-pagenavi pe o interogare personalizată construită pe baza unui formular?
Am postat această problemă și pe forumurile de suport WordPress, pentru pluginul wp-pagenavi al lui scribu:
http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1
Situația mea:
Folosesc un formular pentru a crea o interogare personalizată care afișează postări dintr-o arhivă de tip custom post type care au o anumită valoare pentru câmpul personalizat (De ex: Pentru "custom-post-type" afișează doar postările care au valoarea "custom-field" selectată în formular). Da, știm, se numește filtrare :P
Arhiva mea de custom post type arată astfel:
www.example.com/custom-post-type-archive
(folosesc setarea "post name" pentru permalinkuri)
După trimiterea formularului, URL-ul devine:
www.example.com/custom-post-type-archive?key=value
Interogarea personalizată este setată să afișeze doar postările cu valoarea value pentru câmpul personalizat 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);
După loop am:
wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();
Interogarea funcționează, primesc rezultatele corecte. Dar am probleme cu paginarea. Când merg la pagina următoare, primesc acest URL:
www.example.com/custom-post-type-archive/page/2?key=value
dar paginarea încă arată ca și cum aș fi pe prima pagină și rezultatele sunt aceleași.
Dacă introduc manual:
www.example.com/custom-post-type-archive?key=value&page=2
Primesc rezultatele corecte (de la pagina 2), dar toate linkurile de navigație sunt la fel ca URL-ul introdus manual mai sus.
Vă rog ajutați-mă (sugestii, resurse, orice).
Mulțumesc, Radu

Poți încerca să implementezi paginarea bazată pe AJAX pentru plugin-ul wp-pagenavi (vezi http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ pentru referință). Cred că asta va rezolva problema ta.

Deoarece acest subiect apare în căutări, aș dori să menționez că WP Page Navi (începând cu versiunea 2.74) acum suportă interogări personalizate.
FAQ-ul WP_Pagenavi trimite la următorul articol care explică cum să folosești pluginul Pagenavi cu o interogare secundară prin transmiterea funcției wp_pagenavi()
a unui parametru de interogare.
Din tutorial:
$my_query = new WP_Query();
while ( $my_query->have_posts() ) : $my_query->the_post();
the_title();
// mai multe elemente aici
endwhile;
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_postdata(); // evită erori mai departe în pagină

Probabil problema a fost deja rezolvată aici: https://stackoverflow.com/a/13216165/1801379
De asemenea, poți obține câteva idei de aici: https://wordpress.stackexchange.com/a/4131/23290

Iată soluțiile pe care le-am găsit (folosesc WP 3.3.2 și WP-Pagenavi 2.82):
Soluția 1: Folosirea parametrului paged
în loc de page
pentru get_query_var
.
Soluția 2: Folosirea navigării bazate pe Ajax, așa cum este descris în articolul menționat de swtshweta.
(folosind Ajax, paginarea funcționează corect chiar și cu parametrul page
).

În mod ciudat, răspunsul propus nu afișează nimic în browserul meu. Am cea mai recentă versiune de WordPress și cea mai recentă versiune de Chrome. Oricum, mulțumesc.
Deși wp_pagenavi apare corect, iar link-urile afișează /page2/, /page3/ și așa mai departe, și am adăugat atributul $paged sau $page la wp_query-ul meu, întotdeauna apare prima pagină.

Radu, Următoarea soluție a funcționat pentru mine: Am modificat un cod standard de paginare și l-am făcut să trimită "&page=xxx" și am capturat variabila $page din trimiterea formularului. Acum funcționează perfect.
Observă ultima linie, acolo s-au făcut modificările.
global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //aici captez pagina solicitată
function pagenavi( $found_posts, $p = 2 ) { // pagini afișate înainte și după pagina curentă
if ( is_singular() ) return; // nu afișa în pagini unice
global $paged;
$max_page = intval($found_posts / 10) + 1;
echo('max_page=' . $max_page);
if ( $max_page == 1 ) return; // nu afișa când există o singură pagină
if ( empty( $paged ) ) $paged = 1;
echo '<span class="pages">Pagina: ' . $paged . ' din ' . $max_page . ' <BR></span> '; // pagini
if ( $paged > $p + 1 ) p_link( 1, 'Prima' );
if ( $paged > $p + 2 ) echo '... ';
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Pagini din mijloc
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> ";
}

<<Către administratorii stachexchange>> vă rog să considerați răspunsul meu ca răspuns la întrebarea mea din bounty. Soluțiile oferite de membri au fost valoroase, dar nu au funcționat pentru mine, deoarece soluția propusă $paged = get_query_var('page'); a fost întotdeauna GOALĂ pentru sistemul meu. Mulțumesc.
