Estoy tratando de mostrar publicaciones para categorías en mi archivo category.php con paginación, pero cuando hago clic en el botón “publicaciones anteriores”, obtengo un 404. Aquí está el código que estoy usando actualmente para la consulta:
<?php
// Get ID of category we're currently looking at
$cat = get_cat_id( single_cat_title("",false) );
query_posts(array(
'posts_per_page'=>25,
'cat' => $cat,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
));
if(have_posts()):
?>
La estructura de enlaces permanentes que estoy usando es /%category%/%postname%/
He leído que hay un error que lo dejará con un error 404 si “posts_per_page” está configurado en menos que el valor predeterminado, pero ese no parece ser el problema. El valor predeterminado en mi configuración es 20.
¿Algunas ideas? ¿Es esto un problema con la configuración de enlaces permanentes? ¿No debería tener /category-name/page/2 funcionar de la misma manera que /blog-page/page/2?
También obtengo un 404 si trato de acceder a categorías como esta: /categoría/nombre-gato, o /página-blog/categoría/nombre-gato
¡Gracias!
lauren
Esto suena muy similar a lo que experimenté (en mi tema secundario, el enlace permanente personalizado %category%%postname% resultó en un 404 cuando usaba la paginación en category.php, aunque solo en la página 2).
Encontré que esta solución funcionó muy bien: http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/
Para resumir la solución, en mi niño functions.php
archivo, agregué este fragmento de código:
function custom_pre_get_posts( $query ) {
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
$query->set( 'paged', str_replace( "https://stackoverflow.com/", '', get_query_var( 'page' ) ) ); } }
add_action('pre_get_posts','custom_pre_get_posts');
function custom_request($query_string ) {
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; }
add_filter('request', 'custom_request');
Pasé mucho tiempo leyendo sobre las diferentes causas y soluciones para este error, en mi caso fue que WP no estaba solicitando la categoría personalizada correcta. ¡Esta solución me ahorró mucho tiempo!
-
Después de que logré poner en marcha la paginación para la categoría, surgió este problema. Con su respuesta, todo funcionó bien, ¡gracias!
– lowtechsun
9 dic 2016 a las 11:21
-
Eso funcionó para el 404. Ahora www.domain.com/taxonomy/page/2 no muestra 404 PERO solo carga el contenido de las primeras páginas cada vez.
– Omar
21 de marzo de 2017 a las 21:04
-
¡sí! gracias… el guión combinado con el
query_posts
en la respuesta original me funciono– Omar
21 de marzo de 2017 a las 21:13
-
Hay un complemento que implementa esto: wordpress.org/plugins/category-pagination-fix
– Nukium
8 de febrero de 2018 a las 14:53
-
¡¡Gracias!! (Un error tipográfico: cambiar
is_category()
a&& is_category()
.) ¡Gracias a Dios por StackOverflow! Pensé que iba a pasar HORAS resolviendo esto.– Greg Perham
15 de agosto de 2018 a las 1:17
Tuve el mismo problema y la solución de Lauren me ayudó. Mi problema fue que con este código la página actual no cambió, se atascó en la página 1.
En functions.php agregué el siguiente código:
function custom_pre_get_posts($query)
{
if ($query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
$query->set('page_val', get_query_var('paged'));
$query->set('paged', 0);
}
}
add_action('pre_get_posts', 'custom_pre_get_posts');
y en la plantilla de categoría (category.php) usé este código:
$paged = (get_query_var('page_val') ? get_query_var('page_val') : 1);
$query = new WP_Query(array(
'posts_per_page' => 3,
'cat' => $cat,
'orderby' => 'date',
'paged' => $paged,
'order' => 'DESC'));
para la paginación cambié este código así. Espero que mi solución ayude:
$big = 999999999;
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '/page/%#%',
'current' => max(1, $paged),
'prev_text' => __('Previous Page'),
'next_text' => __('Next Page'),
'show_all' => true,
'total' => $query->max_num_pages
));
-
Esto también resuelve problemas 404. Gracias por publicar esto. Estaba teniendo un problema que /categoría/noticias/página/2 mostraba 404. Esta solución lo solucionó.
– HADI
4 de noviembre de 2018 a las 17:40
andres herder
Primero intentaría cambiar a WP_Query, tiene menos errores con Paginación.
https://codex.wordpress.org/Function_Reference/query_posts
query_posts() es una forma demasiado simplista y problemática de modificar la consulta principal de una página reemplazándola con una nueva instancia de la consulta. Es ineficiente (vuelve a ejecutar consultas SQL) y fallará por completo en algunas circunstancias (especialmente a menudo cuando se trata de paginación de publicaciones).
$cat = get_cat_id( single_cat_title("",false) );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$the_query = new WP_Query
(
array
(
'posts_per_page'=>25,
'cat' => $cat,
'paged' => $paged
),
);
if ($the_query->have_posts()) : ?>
Si eso no funciona, intente cambiar su estructura de enlaces permanentes a ID de publicación y vea si eso la cambia. Si ninguno de estos funciona, configura $cat en una categoría que sepas que existe (y tiene 26 publicaciones) y asegúrate de que eso no esté causando el problema.
Espero que esto ayude.
-
Esto funciona si cambio la estructura del enlace permanente de
/%category%/%postname%
a/%category%/%post_id%
. Pero esa no es realmente una opción factible. Necesito el título de la publicación en las URL para fines de SEO.– Nick
11 mayo 2015 a las 17:36
-
Funciona cuando cambio un enlace de
/%category%/page/2/
a/category/%category%/page/2/
. Sin embargo, las funciones de wordpress que agregan los enlaces de publicaciones más antiguas/nuevas no tienen eso en sus URL.– Nick
11 mayo 2015 a las 18:05
-
Podrías probar esto wordpress.org/support/view/plugin-reviews/… no se ha actualizado en 2 años, pero hay una publicación de revisión del mes pasado que dice que todavía funciona. (son solo dos funciones pequeñas). Con suerte, esto puede ayudarlo a resolver el problema.
– Andrew Herder
12 mayo 2015 a las 21:14
-
¡Gracias! Eso funcionó parcialmente. Tuve que cambiar un par de cosas en el complemento para que funcionara. El código está aquí para cualquiera que pueda necesitarlo: creative.link/code/wordpress-category-pagination-fix
– Nick
13 mayo 2015 a las 19:47