Problema di reindirizzamento paginazione $paged su WordPress
Ho configurato una query personalizzata per i miei articoli (single.php) con paginazione, che tra l'altro funziona perfettamente con la struttura di permalink predefinita.
dominio.com/p=ID&paged=2
Se cambio i permalink in /%postname%/ la pagina/2/ viene reindirizzata alla prima pagina.
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array( 'connected_type'=> 'posts_to_posts', 'posts_per_page' => 3, 'paged' => $paged, 'order' => 'ASC', 'connected_items' => get_queried_object() );
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query( $args );
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a>
<?php endwhile; endif; $wp_query = null; $wp_query = $temp; wp_reset_query(); ?>
Ciò che mi confonde è il fatto che funzioni con i permalink predefiniti, perché non funziona con i permalink "leggibili"?
La paginazione della homepage funziona bene, solo la pagina dell'articolo che presenta problemi. Qualcuno può indicarmi la direzione giusta? Dove dovrei cercare gli errori?
Ho disattivato tutti i plugin, eliminato htaccess e creatone uno nuovo, ma nulla è cambiato.
Se qualcuno dovesse imbattersi in questo problema, puoi aggiungere questo codice al tuo file functions.php
add_filter('redirect_canonical','pif_disable_redirect_canonical');
function pif_disable_redirect_canonical($redirect_url) {
if (is_singular()) $redirect_url = false;
return $redirect_url;
}

fare questo avrà altre conseguenze che potrebbero essere indesiderate, dato che stai disabilitando tutti i reindirizzamenti canonici per tutti i post singoli, usalo a tuo rischio e pericolo.

È un problema molto vecchio relativo all'impaginazione dei custom post type. Ed è stato segnalato come issue aperta sul tracker di sviluppo del core di WordPress. L'ultima soluzione alternativa presente sul tracker è quella mostrata di seguito. Funziona perfettamente nel mio caso.
/**
* Corregge il problema di impaginazione su un custom post type
*
* @link https://core.trac.wordpress.org/ticket/15551
*
* @param object $request WP_Query
*
* @return object
*/
function child_martfury_fix_request_redirect( $request ) {
if ( isset( $request->query_vars['post_type'] )
&& 'custom_type' === $request->query_vars['post_type']
&& true === $request->is_singular
&& - 1 == $request->current_post
&& true === $request->is_paged
) {
add_filter( 'redirect_canonical', '__return_false' );
}
return $request;
}
add_action( 'parse_query', 'child_martfury_fix_request_redirect' );

Se questo non è il loop principale (ovvero la Pagina Blog), WordPress interpreterà /2 come un nome di sottopagina e non come un query_var di impaginazione.
Se desideri che funzioni su una pagina, devi registrare un query_var personalizzato http://codex.wordpress.org/WordPress_Query_Vars e creare la struttura /page/paging/2 ad esempio.

Ma, se è così, non dovrebbe funzionare nemmeno con i permalink predefiniti, mi sbaglio? Se hai qualche idea che posso provare, fammi sapere.

Sì, ti sbagli :) I permalink "Predefiniti" non hanno bisogno di riscrivere i loro query_vars, quindi la maggior parte dei parametri GET verrà analizzata e sarà accessibile. Ecco perché funziona.

Grazie, mi hai fatto guardare in una direzione diversa. Ho cercato problemi di reindirizzamento con la paginazione e mi sono imbattuto in questa Soluzione, ha funzionato benissimo con il mio codice attuale. :)

Ho provato la soluzione più nota e non ha funzionato per me - usando /nome-pagina/?page=2
venivo comunque reindirizzato a /nome-pagina/
.
Ho anche notato che usare ?p=2
non funzionava.
L'unica soluzione che ho trovato è usare un altro nome per il parametro, ad esempio ?pg=2
che non causa il reindirizzamento ed è accessibile via $_GET['pg']
.
