Usando $paged redirige /page/2 a la página 1
He configurado una consulta personalizada para mis publicaciones (single.php) con paginación, que por cierto funciona perfectamente con la estructura de enlaces permanentes predeterminada.
dominio.com/p=ID&paged=2
Si cambio los enlaces permanentes a /%postname%/, la página/2/ redirige a la primera página.
<?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(); ?>
Lo que me confunde es el hecho de que funcione con los enlaces permanentes predeterminados, ¿por qué no funciona con los enlaces "bonitos"?
La paginación de la página de inicio funciona bien, solo la página de publicación que está mal de alguna manera. ¿Alguien puede indicarme la dirección correcta? ¿Dónde debería buscar errores?
He desactivado todos los plugins, eliminado htaccess y creado uno nuevo, pero sigue sin funcionar.
Si alguien se encuentra con este problema, puedes agregar esto al código de tu 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;
}

Hacer esto tendrá otras consecuencias que pueden ser indeseables, ya que estarás deshabilitando todas las redirecciones canónicas para todas las publicaciones únicas, úsalo bajo tu propio riesgo.

Es un problema muy antiguo con la paginación de tipos de entradas personalizadas. Y tiene un problema abierto en el seguidor de desarrollo del núcleo de WordPress La última solución temporal que aparece en el seguidor es esta de abajo. Funciona muy bien para mí.
/**
* Corrige el problema de paginación en un tipo de entrada personalizada
*
* @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' );

Si este no es el bucle principal (es decir, la Página de Blog), WordPress interpretará el /2 como un nombre de subpágina y no como una variable de consulta de paginación.
Si deseas que esto funcione en una página, necesitas registrar una variable de consulta personalizada http://codex.wordpress.org/WordPress_Query_Vars y crear la estructura /page/paginacion/2, por ejemplo.

Pero, si ese es el caso, no debería funcionar con los permalinks predeterminados tampoco, ¿estoy equivocado? Si tienes alguna idea que pueda probar, por favor házmelo saber.

Sí, lo estás :) Los permalinks "Predeterminados" no necesitan reescribir sus query_vars, por lo que la mayoría de los parámetros GET se analizarán y serán accesibles. Por eso funciona.

Saludos, me hiciste mirar en una dirección diferente. Busqué problemas de redirección con la paginación y me encontré con esta Solución, funcionó genial con mi código actual. :)

Probé la solución más conocida y no funcionó para mí - al usar /nombre-de-pagina/?page=2
todavía me redirigía a /nombre-de-pagina/
.
También noté que usar ?p=2
tampoco funcionó.
La única solución que encontré es usar otro nombre de parámetro, por ejemplo ?pg=2
que no causa redirección y es accesible via $_GET['pg']
.
