为 CPT 设置排除标记查询后,页面导航不起作用



我创建了一个自定义帖子类型来在我的网站上设置小说+文档库。然后我想通过一个小查询从帖子列表中隐藏文档类型,以从我的 CPT 存档页面中排除 slug "文档"。

        <?php 
        /*exclude slug "document" from CPT*/
        $args = array(
            'post_type' => array( 'stfic' ),
            'tax_query' => array(
                array(
                'taxonomy' => 'stfic-genre',
                'field'    => 'slug',
                'terms'    => 'document',
                'operator' => 'NOT IN' 
                )
            )
        );
        $extquery = new WP_Query( $args );
        /*exclude slug "document" from CPT*/
        while( $extquery->have_posts() ): $extquery->the_post(); ?>
             //Do The stuff
        <?php endwhile; ?>
        <?php umica_pagi() ?>

但是在那之后,我下面的分页不起作用(添加到函数中.php):

/*------------------Them Pagination-----------------*/
function umica_pagi() {
  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="st3-pagi"><ul>' . "n";
  /** Previous Post Link */
  if ( get_previous_posts_link() )
    printf( '<li>%s</li>' . "n", get_previous_posts_link('<i class="fa fa-arrow-left"></i> Trang trước') );
  /** 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('Trang Sau <i class="fa fa-arrow-right"></i>') );
  echo '</ul></div>' . "n";
}

我做错了什么?

在分

页函数中,您可以使用global $wp_query对象来抓取max_num_pages进行分页,但是如果您想对自定义查询进行分页,也许这个数字是错误的?

如果您想对自定义查询进行分页,我建议您修改分页函数以获取一个max参数:

    function umica_pagi( $max = false ) {
       ...
       if ( ! $max ) {
          $max = intval( $wp_query->max_num_pages );
       }
       ...  
    }

然后你可以像这样调用你的函数:

    <?php umica_pagi( $extquery->max_num_pages ); ?>

有类似的问题,这对我有帮助。

但是如果你在这里要分页的不是你的自定义查询,而是主查询,你必须在调用分页函数之前调用wp_reset_postdata()来恢复全局对象。

最新更新