简体   繁体   中英

Wordpress custom taxonomy pagination not working

I'm using the WP PageNavi plugin for pagination. This particular problem in not getting the taxonomy-portflio-category.php page to paginate is also a problem when WP PageNavi is turned off.

I've had a heck of a time getting pagination to work on the homepage and on a page template page, but I did get them to work. Here's their code:

page-home.php (used as a Page template on a static front page called “Home”)

$paged = 1;
if ( get_query_var('paged') ) $paged = get_query_var('paged');
if ( get_query_var('page') ) $paged = get_query_var('page');
$i = 0;
$loop = new WP_Query( array( 'post_type' => 'portfolio', 'paged' => $paged, 'posts_per_page' => 24 ) );
while ( $loop->have_posts() ) : $loop->the_post();
// output
$i++; endwhile;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $loop ) );
    wp_reset_postdata();
}

Pagination works!

page-portfolio.php (used as a Page template on a Page called “Work”)

$i = 0;
$loop = new WP_Query( array( 'post_type' => 'portfolio', 'paged' => get_query_var( 'paged' ), 'posts_per_page' => 24 ) );
while ( $loop->have_posts() ) : $loop->the_post();
// output
$i++; endwhile;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $loop ) );
    wp_reset_postdata();
}

Pagination works!

taxonomy-portfolio-category.php (used as a way to display portfolio sections eg print, photography, etc.)

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
global $wp_query;
query_posts( array_merge( $wp_query->query, array( 'posts_per_page' => 2 ) ) );
if (have_posts()) : while ( have_posts() ) : the_post();
// output
endwhile; endif;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi();
}

Page 1 (/portfolio/interactive/) looks great! It's definitely only posting 2 items and it calculates the correct number of pagination pages. But when you click on page 2 or 3 or 4 (/portfolio/interactive/page/2/) the site defaults to index.php and shows “Page not found”. Pagination fails!

Hopefully I can resolve this soon. I've seen A LOT of people with this same problem of pagination on custom taxonomy pages, but no solid solutions. Please help!

You Need to set posts per page to 24 on the Settings -> Reading page in WP admin. Hope this helps someone.

I have tried using WP-Pagenavi but it never worked so i used the pagination from Wordpress it self, i used the twentyfourteen_paging_nav() function form Twentyfourteen becuse it has a taxonomy page, here is the code:

if ( ! function_exists( 'twentyfourteen_paging_nav' ) ) :
function twentyfourteen_paging_nav() {
global $wp_query, $wp_rewrite;

// Don't print empty markup if there's only one page.
if ( $wp_query->max_num_pages < 2 ) {
    return;
}

$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$pagenum_link = html_entity_decode( get_pagenum_link() );
$query_args   = array();
$url_parts    = explode( '?', $pagenum_link );

if ( isset( $url_parts[1] ) ) {
    wp_parse_str( $url_parts[1], $query_args );
}

$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';

$format  = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%';

// Set up paginated links.
$links = paginate_links( array(
    'base'     => $pagenum_link,
    'format'   => $format,
    'total'    => $wp_query->max_num_pages,
    'current'  => $paged,
    'mid_size' => 1,
    'add_args' => array_map( 'urlencode', $query_args ),
    'prev_text' => __( '&larr; Previous', 'twentyfourteen' ),
    'next_text' => __( 'Next &rarr;', 'twentyfourteen' ),
) );

if ( $links ) :

?>

<nav class="pagination-contaner" role="navigation">
    <h1 class="screen-reader-text"><?php _e( 'Posts navigation', 'twentyfourteen' ); ?></h1>
    <ul class="pagination">
        <?php echo $links; ?>
    </ul><!-- .pagination -->
</nav><!-- .navigation -->
<?php
endif;
}
endif;

I ran into similar issue, it took me hours of googling! I found the solution at last. Add the following code to functions.php in your theme folder:

$option_posts_per_page = get_option( 'posts_per_page' );
add_action( 'init', 'my_modify_posts_per_page', 0);
function my_modify_posts_per_page() {
    add_filter( 'option_posts_per_page', 'my_option_posts_per_page' );
}
function my_option_posts_per_page( $value ) {
    global $option_posts_per_page;
    if ( is_tax( 'portfolio-category') ) {
        return 2;
    } else {
        return $option_posts_per_page;
    }
}

URL for the solution

May be you need to enable search to enable pagination

While declaring custom taxonomy you should disable search excluding.

exclude_from_search => false

This fixed my problem.

I would like to share following solution (add this code to functions.php in your theme):

function fix_taxonomy_pagination ( $query ) {
  // not an admin page and it is the main query
  if (!is_admin() && $query->is_main_query()){

    if(is_tax()){
      // where 24 is number of posts per page on custom taxonomy pages
      $query->set('posts_per_page', 24);

    }
  }
}
add_action( 'pre_get_posts', 'fix_taxonomy_pagination' );

source

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM