【问题标题】:WordPress custom pagination not showing on custom post typeWordPress自定义分页未显示在自定义帖子类型上
【发布时间】:2019-02-23 17:35:11
【问题描述】:

当我在自定义帖子类型循环中调用该函数时,我的自定义分页函数没有返回任何值,我不知道为什么。

我的分页功能适用于主页,但不适用于自定义帖子类型,我也将它用于我的 WooCommerce 分页,它在那里工作正常。

这是我的循环:

<?php
  $args = array(
    'post_type'=>'winners',
    'posts_per_page' => 6,
    'paged' => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,
  );
  $loop = new WP_Query( $args );
  if ( $loop->have_posts() ) {
    while ( $loop->have_posts() ) : $loop->the_post();
  ?>
    <?php the_title(); ?>
  <?php
    endwhile;
    topdraw_pagination();
  }
  wp_reset_postdata();
  ?>

这是我的分页功能:

<?php
function topdraw_pagination() {
    if( is_singular() ) {
        return;
    }
    global $wp_query;
    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 );
    if( $paged >= 1 ) {
        $links[] = $paged;
    }
    if( $paged >= 3 ) {
        $links[] = $paged - 1;
    }
    if( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 1;
    }
    echo '<nav class="pagination">' . "\n";
    if ( get_previous_posts_link() ) {
        printf( '%s' . "\n", get_previous_posts_link('<span class="icon is-small"><i class="fas fa-caret-left"></i></span>') );
    }
    if ( get_next_posts_link() ) {
        printf( '%s' . "\n", get_next_posts_link('<span class="icon is-small"><i class="fas fa-caret-right"></i></span>') );
    }
    echo '<ul class="pagination-list">' . "\n";
    if( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? ' is-current' : '';
        $aria_current = 1 == $paged ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page 1"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( 1 ) ), $class, $aria_current, '1' );
        if ( ! in_array( 2, $links ) ) {
            echo '<li><span class="pagination-ellipsis">&hellip;</span></li>' . "\n";
        }
    }
    sort( $links );
    foreach ( (array) $links as $link ) {
        $class = $paged == $link ? ' is-current' : '';
        $aria_current = $paged == $link ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page %s"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( $link ) ), $class, $link, $aria_current, $link );
    }
    if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $max - 1, $links ) ) {
            echo '<li><span class="pagination-ellipsis">&hellip;</span></li>' . "\n";
        }
        $class = $paged == $max ? ' is-current' : '';
        $aria_current = $paged == $max ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page %s"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( $max ) ), $class, $max, $aria_current, $max );
    }
    echo '</ul></nav>' . "\n";
}

add_filter( 'next_posts_link_attributes', 'topdraw_next_posts_link_class' );
add_filter( 'previous_posts_link_attributes', 'topdraw_previous_posts_link_class' );

function topdraw_next_posts_link_class() {
    return 'class="pagination-next"';
}

function topdraw_previous_posts_link_class() {
    return 'class="pagination-previous"';
}

提前感谢您的帮助。

【问题讨论】:

  • 您的 CPT 循环显示在页面上?执行在哪里结束?
  • @Michael 不太清楚你的意思?循环在页面上是的

标签: wordpress post types pagination


【解决方案1】:

我通过在自定义帖子类型循环中将 $loop 重命名为 $wp_query 来解决此问题。如果有人能解释为什么这能解决问题,我将不胜感激。

【讨论】:

    【解决方案2】:

    您需要将自定义 WP_Query 实例传递给分页函数,而不是使用全局 $wp_query

      $args = array(
       'post_type'=>'winners',
       'posts_per_page' => 6,
       'paged' => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,
      );
      $loop = new WP_Query( $args );
      if ( $loop->have_posts() ) {
    
       while ( $loop->have_posts() ) : $loop->the_post();
         the_title(); ?>
       endwhile;
    
       topdraw_pagination( $loop );
      }
      wp_reset_postdata();
    

    还有你的功能:

    function topdraw_pagination( $loop ) {
    
     if( is_singular() ) {
        return;
     }
    
     if( $loop->max_num_pages <= 1 ) {
        return;
     }
    
     $paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
     $max = intval( $loop->max_num_pages );
     if( $paged >= 1 ) {
        $links[] = $paged;
     }
     if( $paged >= 3 ) {
        $links[] = $paged - 1;
     }
     if( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 1;
     }
     echo '<nav class="pagination">' . "\n";
     if ( get_previous_posts_link() ) {
        printf( '%s' . "\n", get_previous_posts_link('<span class="icon is-small"><i class="fas fa-caret-left"></i></span>') );
     }
     if ( get_next_posts_link() ) {
        printf( '%s' . "\n", get_next_posts_link('<span class="icon is-small"><i class="fas fa-caret-right"></i></span>') );
     }
     echo '<ul class="pagination-list">' . "\n";
     if( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? ' is-current' : '';
        $aria_current = 1 == $paged ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page 1"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( 1 ) ), $class, $aria_current, '1' );
        if ( ! in_array( 2, $links ) ) {
            echo '<li><span class="pagination-ellipsis">&hellip;</span></li>' . "\n";
        }
     }
     sort( $links );
     foreach ( (array) $links as $link ) {
        $class = $paged == $link ? ' is-current' : '';
        $aria_current = $paged == $link ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page %s"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( $link ) ), $class, $link, $aria_current, $link );
     }
     if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $max - 1, $links ) ) {
            echo '<li><span class="pagination-ellipsis">&hellip;</span></li>' . "\n";
        }
        $class = $paged == $max ? ' is-current' : '';
        $aria_current = $paged == $max ? ' aria-current="page"' : '';
        printf( '<li><a href="%s" class="pagination-link%s" aria-label="Goto page %s"%s>%s</a></li>' . "\n", esc_url( get_pagenum_link( $max ) ), $class, $max, $aria_current, $max );
     }
     echo '</ul></nav>' . "\n";
    }
    

    【讨论】:

    • 谢谢,但这并不能解决问题,分页仍然不显示
    • 我在本地机器上测试了这段代码,它工作正常。好吧,随便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2014-05-15
    • 2011-03-20
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多