添加了自定义帖子类型的主循环 - paginate_links效果不佳

时间:2013-02-16 13:06:55

标签: wordpress pagination custom-post-type

我有这样一段代码

     <?php 
     global $wp_query;
     $args = array_merge( $wp_query->query_vars, array( 'post_type' => array( 'post', 'project') ) );
     $wp_query = new WP_Query( $args );
     if ( have_posts() ) : while ( have_posts() ) : the_post(); 
     ?>
循环之后

      <?php             
    $permalink_structure = get_option('permalink_structure');
    $format = empty( $permalink_structure ) ? '?paged=%#%' : 'page/%#%/';

            echo paginate_links( array(
                'base' => get_pagenum_link(1) .'%_%',               
                'format' => $format,
                'current' => max( 1, get_query_var('paged') ),
                'total' => $wp_query->max_num_pages,
                'prev_text'    => __('«'),
                'next_text'    => __('»'),
                'show_all'     => false,
                'mid_size'     => 2,
                'end_size'     => 1,
            ) );

    ?>

现在问题是,如果我有6个帖子和18个项目,每页3个帖子...... paginate_links 将生成(6 + 18)/ 3页,即8页...所以我点击2然后转到第2页..但是当我点击3 ...我得到错误404。 好像 paginate_links 生成所需的页面链接,但只有链接到6/3页面,如1和2。 问题是肯定的,因为添加了自定义帖子类型,但我无法理解那个问题在哪里。 可能是什么问题?

1 个答案:

答案 0 :(得分:1)

看起来您必须更改“主查询”(您在“主查询中使用”子查询“ “)包含您的自定义帖子类型,因此您的分页链接将起作用。

您可以尝试使用pre_get_posts挂钩

更改“主要查询
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
    if($query->is_main_query() && $query->is_home()){ // <-- EDIT this condition to your needs
        $query->set( 'post_type', array( 'post','projects' ) );
    }
}

将此代码放入当前主题目录的functions.php文件中。

这假设您在首页上使用了分页,即

 http://example.com/page/5

我们有条件$query->is_home()来检查我们是否在首页。如果您在不同的页面上,则可以根据需要更改此条件。

ps:我认为你的方式不起作用,因为你在主题文件中这样做,而且“为时已晚”无法改变分页链接的范围。