Cómo hacer que wp-pagenavi funcione en una consulta personalizada basada en un envío de formulario
También he publicado esto en los foros de soporte de WordPress, para el plugin wp-pagenavi de scribu:
http://wordpress.org/support/topic/plugin-wp-pagenavi-custom-query-form-submit-part-2?replies=1
Mi situación:
Estoy usando un formulario para crear una consulta personalizada que muestra posts de un tipo de contenido personalizado que coincidan con cierto campo personalizado (Ej: Para "tipo-de-contenido-personalizado" mostrar solo posts que tengan el valor "campo-personalizado" seleccionado en el formulario). Lo sé, se llama filtrado :P
Mi archivo de tipo de post personalizado se ve así:
www.example.com/archivo-tipo-contenido-personalizado
(nota que uso la configuración de enlaces permanentes "nombre del post")
Al enviar el formulario, la nueva URL es esta:
www.example.com/archivo-tipo-contenido-personalizado?clave=valor
La consulta personalizada está configurada para mostrar solo posts con el valor del campo personalizado clave:
$value = $_GET['valor'];
$paged = get_query_var('page');
$args = array(
'post_type' => 'tipo-contenido-personalizado',
'meta_key' => 'clave',
'meta_value' => $value,
'paged' => $paged,
'posts_per_page' => 10
);
$my_query = new WP_Query($args);
Después del loop tengo:
wp_pagenavi(array('query' => $my_query));
wp_reset_postdata();
La consulta funciona, obtengo los resultados correctos. Pero tengo problemas para que funcione la paginación. Cuando voy a la siguiente página, obtengo esta URL:
www.example.com/archivo-tipo-contenido-personalizado/page/2?clave=valor
pero la paginación todavía muestra como si estuviera en la primera página y los resultados son los mismos.
Si ingreso manualmente:
www.example.com/archivo-tipo-contenido-personalizado?clave=valor&page=2
Obtengo los resultados correctos (de la página 2), pero todos los enlaces de navegación son iguales a la URL que ingresé manualmente.
Por favor ayuda (pistas, recursos, cualquier cosa).
Gracias,
Radu

Puedes intentar implementar una paginación basada en ajax para el plugin wp-pagenavi (consulta http://wordpressapi.com/2011/05/16/add-ajax-pagination-in-wordpress-blog/ como referencia). Creo que esto resolverá tu problema.

Como esto aparece en las búsquedas, me gustaría señalar que WP Page Navi (en su versión 2.74) ahora admite consultas personalizadas.
El FAQ de WP_Pagenavi enlaza al siguiente artículo para explicar cómo usar el plugin Pagenavi con una consulta secundaria pasando el parámetro de consulta a la función wp_pagenavi()
.
Del tutorial:
$my_query = new WP_Query();
while ( $my_query->have_posts() ) : $my_query->the_post();
the_title();
// más cosas aquí
endwhile;
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_postdata(); // evitar errores más adelante en la página

Probablemente el problema ya ha sido resuelto aquí: https://stackoverflow.com/a/13216165/1801379
También puedes obtener alguna idea de aquí: https://wordpress.stackexchange.com/a/4131/23290

Aquí están las soluciones que encontré (tenga en cuenta que estoy usando WP 3.3.2 y WP-Pagenavi 2.82):
Solución 1: Usar paged
en lugar de page
como parámetro en get_query_var
.
Solución 2: Usar navegación basada en ajax, como se menciona en el artículo que swtshweta señaló.
(usando Ajax, la paginación funciona correctamente incluso con el parámetro page
).

Curiosamente, la respuesta propuesta no muestra nada en mi navegador. Tengo la última versión de WP y el último navegador Chrome. Gracias de todos modos.
Aunque wp_pagenavi aparece correctamente, y los enlaces muestran /page2/, /page3/, etc., y he añadido el atributo $paged o $page a mi wp_query, siempre aparece la primera página.

Radu, La siguiente solución funcionó para mí: Modifiqué un código de paginación estándar, y lo hice enviar "&page=xxx" y capturé $page como variable de envío de formulario. Ahora funciona perfectamente.
Observa la última línea, aquí es donde ocurrieron las modificaciones.
global $paged;
$paged = ($_GET["page"]) ? ($_GET["page"]) : 1; //aquí es donde capturo la página solicitada
function pagenavi( $found_posts, $p = 2 ) { // se mostrarán páginas antes y después de la página actual
if ( is_singular() ) return; // no mostrar en página única
global $paged;
$max_page = intval($found_posts / 10) + 1;
echo('max_page=' . $max_page);
if ( $max_page == 1 ) return; // no mostrar cuando solo hay una página
if ( empty( $paged ) ) $paged = 1;
echo '<span class="pages">Página: ' . $paged . ' de ' . $max_page . ' <BR></span> '; // páginas
if ( $paged > $p + 1 ) p_link( 1, 'Primera' );
if ( $paged > $p + 2 ) echo '... ';
for( $i = $paged - $p; $i <= $paged + $p; $i++ ) { // Páginas intermedias
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, 'Última' );
}
function p_link( $i, $title = '' ) {
if ( $title == '' ) $title = "Página {$i}";
echo "<a class='page-numbers' href='", esc_html( $_SERVER['REQUEST_URI'] . '&page=' .$i ), "' title='{$title}'>{$i}</a> ";
}

<<Para los administradores de stachexchange>> por favor consideren mi respuesta como solución a mi pregunta con recompensa. Las soluciones ofrecidas por los miembros fueron valiosas pero no funcionaron para mí, ya que la solución propuesta $paged = get_query_var('page'); siempre estaba VACÍA para mi sistema. Gracias.
