Problema de paginación 404 en WordPress con /page/2 - ¿qué hacer?
Me encontré con el problema de paginación 404 en /page/2
y traté de encontrar una solución. He leído algunas sugerencias, pero aún no me han ayudado.
Funcionando: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/
No funciona: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/page/2/
He estado tratando de resolver esto durante horas. Entiendo que WordPress asume que "page" es una entrada de la categoría "bolos, doces e sobremesas" ya que mi estructura de enlaces permanentes es /%category%/%postname%/
pero no sé cómo solucionarlo.

Esta publicación me inspiró y encontré el problema de por qué está sucediendo. ¡Me salvaste el día!

Esto lo resolvió por completo para mí. Todavía no entiendo el problema. Mi 'posts_per_page' personalizado está establecido en 9.

En mi caso con enlaces personalizados: /%categoría%/%nombrepost%/ Tuve un problema con: /noticias/pagina/2/
Y finalmente esto funcionó para mí (agregar al archivo functions.php):
function remove_page_from_query_string($query_string)
{
if ($query_string['name'] == 'page' && isset($query_string['page'])) {
unset($query_string['name']);
$query_string['paged'] = $query_string['page'];
}
return $query_string;
}
add_filter('request', 'remove_page_from_query_string');

Acabo de tener exactamente el mismo caso - parece un gran descuido permitir personalizar la estructura de los enlaces permanentes y no dar ninguna pista a los usuarios de que podrían tener que sobrescribir las reescrituras manualmente... ¿O quizás es más bien un error y no debería ser necesario?

Probé durante varias horas, hasta que encontré una solución funcional en este artículo.
En tu archivo functions.php
, añade:
/**
* Corrige la paginación en páginas de archivo
* Después de agregar una regla de reescritura, ve a Ajustes > Enlaces permanentes y haz clic en Guardar para limpiar la caché de reglas
*/
function my_pagination_rewrite() {
add_rewrite_rule('blog/page/?([0-9]{1,})/?$', 'index.php?category_name=blog&paged=$matches[1]', 'top');
}
add_action('init', 'my_pagination_rewrite');
Reemplaza blog
con el nombre de tu categoría en el código anterior.
Después de agregar este código, asegúrate de ir a Ajustes > Enlaces permanentes
y hacer clic en Guardar
para limpiar la caché de reglas, de lo contrario la regla no se aplicará.
¡Espero que esto ayude!

Esto funcionó para mí. Todavía me encantaría saber el 'por qué' de este comportamiento que apareció de la nada. Pero gracias por la solución.

Encontré que cambiar la estructura de los enlaces permanentes funcionó para mí, mira:
El enlace permanente tenía esta estructura personalizada:
/index.php/%year%/%monthnum%/%day%/%postname%/
Luego lo cambié a: Día y nombre (solo seleccioné el botón de radio) y quedó así:
/%year%/%monthnum%/%day%/%postname%/
¡Probé esto y funciona!

Mi solución consta de 3 pasos:
1- El primero: Instalar este plugin: https://wordpress.org/plugins/category-pagination-fix/
2- Luego: Adapta tu código con esta estructura
<?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ?>
<?php
$q=new WP_Query(
array(
"posts_per_page"=>10,
"post_type"=>"",
"meta_key"=>"",
"orderby"=>"meta_value_num",
"order"=>"asc",
"paged" => $paged,
)
);
while($q->have_posts())
{
$q->the_post();
?>
<li></li>
<?php
}
wp_reset_postdata();
?>
<div class="pagination">
<?php
global $q;
$big = 999999999; // necesitamos un número improbable
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $q->max_num_pages
) );
?>
</div>
3- Ve a los ajustes de WordPress > Lectura > Número máximo de entradas por página del blog luego ingresa el número 1

Como otros han mencionado, asegúrate de que tu 'posts_per_page = 6' sea igual o menor que la configuración en WordPress > Ajustes > Lectura > "Las páginas del blog muestran como máximo".
Recientemente me encontré con este problema y el problema era que controlaba completamente el número de publicaciones por página desde el archivo de plantilla. Si no hay suficientes publicaciones para la última página, generará un error 404.
Por ejemplo. Tengo mis publicaciones por página configuradas en 9, pero tenía 25 publicaciones. La página 1 y 2 funcionaban, pero la página 3 daba error 404. Configuré el ajuste de WordPress en 1 y dejé mi archivo de plantilla en 9, y ahora funciona como se esperaba.

En mi caso, usando Divi y el plugin PageNavi, la razón por la que estaba obteniendo el error 404 era que la plantilla de página (archive en mi caso) estaba obteniendo el parámetro de consulta paged
usando get_query_var( 'paged' )
, cuando en realidad lo que tenía que hacer era usar la variable global como se muestra a continuación:
<?php
/*
Template Name: Archivos
*/
get_header(); ?>
<?php
// $paged es una variable global proporcionada por el tema
global $paged;
$args = array(
'posts_per_page' => 4,
'post_type' => 'axis',
'paged' => $paged,
);
$myposts = new WP_Query($args);
?>
<div div style="width: 50%; margin: 0 auto;">
<?php while ( $myposts->have_posts() ) : $myposts->the_post(); ?>
<div class="media-body">
<?php the_content(); ?>
</div>
<?php endwhile; wp_reset_postdata(); ?>
<?php wp_pagenavi( array( 'query' => $myposts ) ); ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Este código corrigió los enlaces y resolvió el formato de publicaciones nombre-del-post/pagina/N
.
La configuración de enlaces permanentes está establecida como "Nombre de la entrada", es decir http://localhost/ejemplo-de-publicacion/

En mi caso, tenía esto en un bucle:
if (is_category()) $args['posts_per_page'] = 8;
Y en Ajustes->Lectura tenía configurado 10 entradas por página para el blog y sindicación.
Cambié a 8 entradas por página en Ajustes->Lectura y ahora el error 404 desapareció y todo parece funcionar.
No tengo idea de por qué, pero probablemente esto pueda ayudar a alguien en el futuro.

Aquí hay una generalización de la respuesta de kregus que corrige todas las categorías de una vez:
/**
* Corrige la paginación en páginas de archivo
*/
function my_pagination_rewrite() {
$categories = '(' . implode('|', array_map(function($category){return $category->slug;}, get_categories())) . ')';
add_rewrite_rule($categories . '/page/?([0-9]{1,})/?$', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
}
add_action('init', 'my_pagination_rewrite');

Para aquellos que están usando WooCommerce; yo estaba buscando lo mismo y descubrí que WooCommerce cambia el posts_per_page
para las categorías de productos.
Consulta: https://woocommerce.com/document/change-number-of-products-displayed-per-page/
Usando el filtro de WooCommerce:
/**
* Cambiar el número de productos que se muestran por página (página de tienda)
*/
add_filter( 'loop_shop_per_page', 'wc_update_loop_shop_per_page', 20 );
function wc_update_loop_shop_per_page( $cols ) {
// $cols contiene el número actual de productos por página basado en el valor almacenado en Opciones → Lectura
// Retorna el número de productos que deseas mostrar por página.
$cols = 9;
return $cols;
}
En mi caso, cambié el $cols
a 12 y luego la paginación volvió a funcionar correctamente.

Yo también tuve este problema, probé todas las demás soluciones en esta página y nada funcionó. En mi caso, fue causado por tener la 'Base de categoría' igual que el permalink de mi página de blog.
Por ejemplo, el permalink de mi página de blog era 'articulos' y también tenía configurada la 'Base de categoría' (en Ajustes > Enlaces permanentes) como 'articulos'. Cambiar la 'Base de categoría' a otra cosa solucionó los errores 404.

Estoy recibiendo el error 404 cuando regreso a la URL con /page/2/...
. Así que voy a mi página de error 404 de WordPress y agrego este código JavaScript en la parte superior de la página de error:
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
var getreurl = window.location.href;
if(getreurl != ""){
var res = getreurl.split("/?");
if(res[1] != ""){
var resd = "http://www.yourwebsite.com/list/?"+res[1];
window.location = resd;
}
}
</script>
Cuando regreso a la página 404, recoge la URL, analizo la URL y obtengo la cadena de URL que necesito, luego reconstruyo un nuevo enlace y redirecciono al nuevo enlace reconstruido.

¡Encontré la solución!
Instalar este plugin resolvió el problema: https://wordpress.org/plugins/category-pagination-fix/
También tuve que hacer cambios en Ajustes > Lectura para mostrar menos de 10 publicaciones por página (ahora muestro 6 publicaciones por página, pero cualquier número menor a 10 debería funcionar).
Espero que les funcione a todos. :)

¿un plugin obsoleto que soluciona un problema específico con WordPress que fue resuelto en el núcleo hace 6 años? difícilmente esta sea una buena respuesta
