¿Por qué "/page/2/" no funciona?

6 mar 2012, 01:30:06
Vistas: 66.5K
Votos: 15

Finalmente logré que la paginación funcione con el código siguiente, pero ahora los enlaces de paginación dirigen a /videos/page/2/, que no existe. ¿Cómo puedo hacer que la página 2 funcione?

<?php
// Almacenar la consulta actual
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  // mostrar contenido
endwhile;           

php  wp_pagenavi();
?>
2
Comentarios

No recomendaría sobrescribir la consulta principal de esa manera, ¿has considerado usar pre_get_posts? Así podrías utilizar el código de paginación incorporado en lugar de escribir el tuyo propio, y podrías simplificarlo a un bucle de publicaciones estándar

Tom J Nowell Tom J Nowell
7 feb 2016 15:32:27

Además, WordPress proporciona una página de archivo estándar para tipos de contenido, por lo que ya deberías tener un archivo de publicaciones en /videos/ que cargará archive-videos.php, lo que no requiere modificar consultas

Tom J Nowell Tom J Nowell
7 feb 2016 15:33:26
Todas las respuestas a la pregunta 5
4
21

Encontré la respuesta:

Después de un largo día depurando el núcleo de WordPress, logré resolver este problema.

Básicamente, NO PUEDES tener una PÁGINA y un TIPO DE ENTRADA PERSONALIZADO con el mismo nombre. Si lo haces, las reglas de reescritura de enlaces permanentes se confundirán y generarán un error 404.

Una solución muy simple que estoy usando es: La página que lista los tipos de entradas personalizadas se llama en plural (ej. productos) y el nombre real del tipo de entrada está en singular (ej. producto). Así no entran en conflicto y todo funciona bien.

¡Listo! Espero que esto ahorre tiempo a otras personas.

6 mar 2012 01:53:39
Comentarios

Supongo que no solo con publicaciones personalizadas, tampoco puedes tener una publicación y una página con el mismo nombre.

Rutwick Gangurde Rutwick Gangurde
6 mar 2012 05:53:05

¡Han pasado 9 años y sigue siendo actual! Gracias

Sid Sid
30 mar 2021 14:18:07

No tengo idea de qué significa esto... ¡Pero sé que es la solución!

Jamie Hutber Jamie Hutber
17 sept 2021 02:31:53

Esta publicación me ayudó. No estoy seguro si es exactamente el mismo problema, pero cambiar el nombre de mi página de search/ a search-2 resolvió un problema similar de paginación. Supongo que tengo un conflicto en mi tema con el slug search/. ¿Alguien aquí puede sugerir cómo confirmar eso? No encuentro ninguna referencia a "search" en wp_posts - post_name.

jnthnclrk jnthnclrk
7 nov 2023 01:37:01
0

Después de mucho tiempo encontré una solución para este problema (gracias a franzblog).

Si estás usando la versión 4.2 o superior, necesitas agregar las siguientes líneas en tu archivo functions.php:

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

¡Ahora todo funciona correctamente!

7 feb 2016 15:16:17
0

NO PUEDES tener una PÁGINA y un TIPO DE POST PERSONALIZADO con el mismo nombre

Tal vez hace tres años era imposible, pero ahora SÍ PUEDES.

Primero, añade estas líneas a $args en tu tipo de post:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'tu-slug', // si necesitas un slug
                 'with_front' => false,
                 ),

Segundo, en functions.php añade la acción:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

No olvides limpiar las reglas en el panel de control.

30 jul 2015 15:34:09
1

Una posibilidad es que, en el panel de administración Ajustes -> Lectura, si has seleccionado una Página de entradas, la opción Las páginas de blog muestran como máximo entrará en conflicto con tu consulta personalizada posts_per_page en esa página.

Así que asegúrate de que o bien deseleccionas la página de entradas, o te aseguras de que las entradas por página coincidan con la opción Las páginas de blog muestran como máximo en Ajustes -> Lectura.

23 may 2021 19:16:18
Comentarios

¡Gracias! He pasado tanto tiempo intentando averiguar cuál era el problema

probablybest probablybest
3 may 2023 17:33:00
0

Después de depurar durante mucho tiempo, finalmente encontré la solución al problema de paginación

Básicamente, en WordPress, no puedes tener una PÁGINA y un TIPO DE ENTRADA PERSONALIZADO (Custom Post Type) con el mismo nombre. Si lo haces, las reglas de reescritura de enlaces permanentes se confundirán y generarán un error 404.

22 sept 2020 18:45:26