web-dev-qa-db-fra.com

La pagination ne fonctionne pas sur la page d'accueil

J'ai une page nommée "share" avec une boucle complexe qui fonctionne parfaitement. Cette page est située à domain.com/share. Maintenant, je dois utiliser cette page comme page d'accueil, je suis donc allé dans "Paramètres -> Lecture" et j'ai choisi cette page comme page statique.

Le problème est maintenant que la pagination ne fonctionne plus. Sur la page elle-même, elle affiche domain.com/share/page/2, mais maintenant, elle porte domain.com/page/2 et ne charge que le même contenu de la première page, quelle que soit la page où vous vous trouvez.

Je n'ai pas apporté d'autres modifications, j'ai simplement choisi cette page comme page de couverture. Quelles sont les solutions possibles ici?

J'utilise WP Pagenavi si cela fait une différence.

Ceci est mon modèle 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')
);

$taxonomies = array();
foreach ($post_types as $post_type) {
  foreach (get_object_taxonomies($post_type) as $tax) {
    if (array_search($tax, $taxonomies) === false) $taxonomies[] = $tax;
  }
}

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();
?>

Et voici le code de pagination dans 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 ?>

  <?
}
4
elclanrs

J'avais affronté le même problème. Et finalement, j'ai résolu le problème.
Obtenir le numéro de pagination actuel

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

Pour obtenir le numéro de pagination actuel sur une page de garde statique (modèle de page), vous devez utiliser la variable de requête 'page'.

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

Donc, vous devriez utiliser get_query_var('page') au lieu de get_query_var('paged').
Vous pouvez utiliser la fonction is_front_page() dans la condition if pour la requête Frontpage. Juste comme

<?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;
}

Le crédit va ici

4
Eh Jewel

Je n'ai pas testé cela, mais la page WP Query dit:

Remarque: utilisez get_query_var('page'); si vous souhaitez que votre requête fonctionne dans un modèle de page que vous avez défini comme page d'accueil statique.

Alors, vous avez peut-être besoin de ceci:

$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' ),
);
2
Charles Clarkson

J'utilise ces codes pour la pagination. on index.php pour la boucle;

<?php if ( have_posts() ) :  while ( have_posts() ) : the_post(); ?>
    // add title,excerpt or permalinks 
<?php endwhile; ?>
    <?php pagination(); ?>
<?php else : ?>
        <?php // no posts found message goes here ?>
<?php endif; ?>

que d'ajouter les lignes suivantes à functions.php

function pagination() {

    if( is_singular() )
        return;

    global $wp_query;

    /** Stop execution if there's only 1 page */
    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 );

    /** Add current page to the array */
    if ( $paged >= 1 )
        $links[] = $paged;

    /** Add the pages around the current page to the 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";

    /** Previous Post Link */
    if ( get_previous_posts_link() )
        printf( '<li>%s</li>' . "\n", get_previous_posts_link() );

    /** Link to first page, plus ellipses if necessary */
    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>';
    }

    /** Link to current page, plus 2 pages in either direction if necessary */
    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 );
    }

    /** Link to last page, plus ellipses if necessary */
    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 );
    }

    /** Next Post Link */
    if ( get_next_posts_link() )
        printf( '<li>%s</li>' . "\n", get_next_posts_link() );

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

}
0
ahmetlutfu

Vous réinitialisez la requête avant de générer la pagination, regardez ces lignes de votre code:

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

Je n'ai pas cherché plus loin à cause de cela. Corrigez ceci et dites s'il résout le problème.

0
cybmeta