0

ページネーションを持つカテゴリ ループがあります。最初のページは常に正しいです。最初のページを通過すると、カテゴリが混在しています。また、ページ数は常に間違っています。

<?php
    global $paged;
    $cat = get_the_category();
    $catSlug = $cat[1]->slug;
    $query = new WP_Query(array('category_name' => $catSlug,'posts_per_page' => 20,'paged' => $paged));
 ?>
<?php
    while ( $query->have_posts() ) :
        $query->the_post();
?>
        <li><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( '%s', 'starkers' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php endwhile; ?>
    </ul>
<?php
    global $wp_query;

    $catSlug = $cat[0]->slug;
    $total_pages = $wp_query->max_num_pages;

    if ($total_pages > 1){

  $current_page = max(1, get_query_var('paged'));

  echo paginate_links(array(
      'base' => get_pagenum_link(1) . '%_%',
      'format' => '?paged=%#%',
      'current' => $current_page,
      'total' => $total_pages,
      'add_args' => array('category_name' => $catSlug)
    ));
}
?>
4

1 に答える 1

0

理解した:

paginate_links() が機能するには query_posts() が必要です。次のように、wp_query を使用するのではなく、query_posts を変更する必要がありました。

<?php
    global $query_string;
    query_posts( $query_string . '&posts_per_page=20' );
?>
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
        <li><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( '%s', 'starkers' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php endwhile; ?>
    </ul>
<?php
    global $wp_query;

$total_pages = $wp_query->max_num_pages;

if ($total_pages > 1){

  $current_page = max(1, get_query_var('paged'));

  echo paginate_links(array(
      'base' => get_pagenum_link(1) . '%_%',
      'format' => '?paged=%#%',
      'current' => $current_page,
      'total' => $total_pages,
    ));
}
?>
于 2013-02-25T19:54:20.890 に答える