Paginación no funciona en página de inicio

25 abr 2013, 04:23:04
Vistas: 15.4K
Votos: 4

Tengo una página llamada "share" con un loop complejo que funciona perfectamente. Esta página está ubicada en domain.com/share. Ahora necesito usar esta página como página de inicio, así que fui a "Ajustes -> Lectura" y seleccioné esa página como página estática.

El problema ahora es que la paginación ya no funciona. En la página real se muestra como domain.com/share/page/2 pero ahora aparece como domain.com/page/2 y simplemente carga el mismo contenido de la primera página una y otra vez sin importar en qué página estés.

No hice ningún otro cambio, básicamente solo seleccioné esa página como página de inicio. ¿Cuáles son las posibles soluciones aquí?

Estoy usando WP Pagenavi por si eso hace alguna diferencia.

Este es mi template page.php:

<?
$paged = get_query_var('paged') ? get_query_var('paged') : 1;

if (is_page('join')) $post_types = array('articles');
if (is_page('learn')) $post_types = array('actions');
if (is_page('share')) $post_types = array('articles', 'actions');

$category = get_query_var('category');
$type = get_query_var('type');

$args = array(
  'post_type' => $post_types,
  'paged' => $paged,
  'tax_query' => array('relation' => 'AND')
);

// Obtener todas las taxonomías relevantes
$taxonomies = array();
foreach ($post_types as $post_type) {
  foreach (get_object_taxonomies($post_type) as $tax) {
    if (array_search($tax, $taxonomies) === false) $taxonomies[] = $tax;
  }
}

// Construir consulta de taxonomías
foreach ($taxonomies as $taxonomy) {

  $all_terms = get_terms($taxonomy, array('fields' => 'names'));
  $query_terms = array(ucfirst($category), ucwords(str_replace('-', ' ', $type)));
  $cur_terms = array_values(array_filter(array_intersect($all_terms, $query_terms)));

  if (! empty($cur_terms)) {
    $args['tax_query'][] = array(
      'taxonomy' => $taxonomy,
      'terms' => empty($cur_terms) ? $all_terms : $cur_terms,
      'field' => 'slug'
    );
  }
}

if (is_page('join')) $args['posts_per_page'] = 36;

$query = new WP_Query($args);

get_header();
Theme::toolbar();
?>

<div class="center">
  <div id="content">
    <? if ($query->have_posts()): ?>
      <? while ($query->have_posts()): $query->the_post() ?>
        <? get_template_part('content') ?>
      <? endwhile ?>
    <? else: ?>
    <? endif ?>
  </div>
</div>

<?
wp_reset_query();
Theme::pagination($query);
get_footer();
?>

Y este es el código de paginación en Theme:

function pagination($query = null)
{
  global $wp_query;
  if (empty($query)) $query = $wp_query;
  $is_paged = $query->max_num_pages > 1;
  ?>

  <? if ($is_paged): ?>
    <div class="center"><div id="pagination"><? wp_pagenavi(array('query' => $query)) ?></div></div>
  <? endif ?>

  <?
}
8
Comentarios

Quizás estoy siendo tonto, pero ¿hay alguna razón particular por la que llamas a wp_reset_query(); antes de llamar a la paginación?

netfreak netfreak
25 abr 2013 14:49:58

¿Tu tema tiene una plantilla front-page.php? Si es así, eso anulará tu plantilla page.php.

mrwweb mrwweb
25 abr 2013 18:08:17

@mrwweb: No, no hay front-page.php. El contenido se muestra bien, igual que en share. La paginación aparece pero todas las páginas cargan el contenido de la primera. Tengo scroll infinito, así que se queda atascado y carga el mismo contenido una y otra vez infinitamente.

elclanrs elclanrs
25 abr 2013 22:39:28

¿Puedes activar WP_DEBUG y quizás hacer un volcado de tu $query especialmente cuando vas a la siguiente página?

netfreak netfreak
26 abr 2013 01:49:36

@netfreak: Tengo WP_DEBUG activado. Acabo de revisar la consulta de nuevo detenidamente, y en page/2 dice paged=>1?! Pero en share/page/2 dice paged=>2... No lo entiendo.

elclanrs elclanrs
26 abr 2013 02:09:41

is_page('share') ya no es verdadero cuando es la página de inicio, no estoy seguro si eso está contribuyendo al problema.

Milo Milo
26 abr 2013 02:23:14

@Milo: Probé con is_front_page() y no hizo diferencia, el problema persiste...

elclanrs elclanrs
26 abr 2013 03:26:15

Por favor eviten discusiones extendidas en los comentarios. @elclanrs por favor envía [ediciones] con información adicional, no comentarios.

kaiser kaiser
25 abr 2014 09:41:03
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 4
1
11

Me había enfrentado al mismo problema. Y finalmente, resolví el problema.
Obteniendo el número de paginación actual

<?php  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  ?>

Para obtener el número de paginación actual en una página frontal estática (plantilla de página) debes usar la variable de consulta 'page'.

<?php  $paged = (get_query_var('page')) ? get_query_var('page') : 1;  ?>

Por lo tanto, deberías usar get_query_var('page') en lugar de get_query_var('paged').
Puedes usar la función is_front_page() en una condición if para la consulta de la página frontal. Así como-

<?php
if(is_front_page()) {
    $paged = (get_query_var('page')) ? get_query_var('page') : 1;
}else {
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
}

El crédito va aquí

31 jul 2017 18:25:00
Comentarios

¡Brillante! ¡¡Gracias!!

tillinberlin tillinberlin
15 abr 2024 15:56:31
0

No probé esto, pero la página de WP Query dice:

Nota sobre paginación: Usa get_query_var('page'); si quieres que tu consulta funcione en una plantilla de Página que hayas configurado como tu página de inicio estática.

Entonces, quizás necesites esto:

$page_number = get_query_var('page') ? get_query_var('page') : 1;

[ ... ]

$args = array(
    'post_type' => $post_types,
    'page'      => $page_number,
    'tax_query' => array( 'relation' => 'AND' ),
);
10 may 2013 21:21:03
0

Estoy usando este código para la paginación. En index.php para el bucle:

<?php if ( have_posts() ) :  while ( have_posts() ) : the_post(); ?>
    // agregar título, extracto o enlaces permanentes 
<?php endwhile; ?>
    <?php pagination(); ?>
<?php else : ?>
        <?php // mensaje de no se encontraron publicaciones va aquí ?>
<?php endif; ?>

Luego agrega las siguientes líneas a functions.php

function pagination() {

    if( is_singular() )
        return;

    global $wp_query;

    /** Detener la ejecución si solo hay 1 página */
    if( $wp_query->max_num_pages <= 1 )
        return;

    $paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
    $max   = intval( $wp_query->max_num_pages );

    /** Agregar la página actual al array */
    if ( $paged >= 1 )
        $links[] = $paged;

    /** Agregar las páginas alrededor de la página actual al array */
    if ( $paged >= 3 ) {
        $links[] = $paged - 1;
        $links[] = $paged - 2;
    }

    if ( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 2;
        $links[] = $paged + 1;
    }

    echo '<div class="navigation"><ul>' . "\n";

    /** Enlace a la publicación anterior */
    if ( get_previous_posts_link() )
        printf( '<li>%s</li>' . "\n", get_previous_posts_link() );

    /** Enlace a la primera página, más puntos suspensivos si es necesario */
    if ( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? ' class="active"' : '';

        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( 1 ) ), '1' );

        if ( ! in_array( 2, $links ) )
            echo '<li>…</li>';
    }

    /** Enlace a la página actual, más 2 páginas en cualquier dirección si es necesario */
    sort( $links );
    foreach ( (array) $links as $link ) {
        $class = $paged == $link ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
    }

    /** Enlace a la última página, más puntos suspensivos si es necesario */
    if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $max - 1, $links ) )
            echo '<li>…</li>' . "\n";

        $class = $paged == $max ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
    }

    /** Enlace a la siguiente publicación */
    if ( get_next_posts_link() )
        printf( '<li>%s</li>' . "\n", get_next_posts_link() );

    echo '</ul></div>' . "\n";

}
3 sept 2013 10:26:22
0

Reiniciaste la consulta antes de generar la paginación, mira estas líneas de tu código:

wp_reset_query();
Theme::pagination($query);
get_footer();

No he mirado más allá debido a esto. Corrige esto y dime si soluciona el problema.

3 sept 2013 10:49:59