0

我有这么一段代码

     <?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。问题肯定是因为自定义帖子类型补充说,但我不明白那个问题出在哪里。可能是什么问题?

4

1 回答 1

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:我认为您的方式行不通,因为您是在主题文件中执行此操作,而更改分页链接的范围“为时已晚”。

于 2013-02-16T15:23:02.257 回答