自定义帖子类型博客分页冲突

时间:2014-02-17 作者:Chris

我有一个名为“emp\\U案例研究”的自定义帖子类型,它有一个页面存档。以下是archive-emp\\U案例研究的代码。php:

<?php
   $blog = $wp_query;
   $wp_query= null;
   $args= null;

   $args = array(
       \'post_type\' => \'emp_case-studies\'
    );

   $postsperpage = 5;
   $offset = $paged == 0 ? 0 : ($paged-1)*$postsperpage;


   $paging =   array(
      \'posts_per_page\' => $postsperpage,
      \'offset\' => $offset
   );

   $ordering =  array(
      \'orderby\' => \'ID\',
      \'order\' => \'DESC\'
   );


   $args = array_merge($args, $ordering, $paging);  
   $wp_query = new WP_Query($args);

?>

<?php
   get_header(); 
   get_template_part( \'include/content\', \'head\' );
?>

<div class="postcontent nobottommargin<?php if( semi_option( \'blog_sidebar\' ) == \'left\' ) { echo \' col_last\'; } ?> clearfix">
<?php
        if ( $wp_query->have_posts() ) :
        ?>
        <div id="posts" class="small-posts clearfix">
        <?php
            while ( $wp_query->have_posts() ) : $wp_query->the_post();
            ?>

                            <div id="post-<?php $wp_query->ID; ?>" <?php post_class(\'entry clearfix\'); ?>>
                                <?php
                                get_template_part( \'include/blog/news/post\', \'standard\' );
                                ?>
                            </div>
            <?php                
            endwhile;
            get_template_part( \'include/blog/navigation\' );
            ?></div><?php
        else :
            get_template_part( \'include/blog/error\' );
        endif;
        $wp_query = $temp;
        ?>
</div>
<?php
get_sidebar(\'casestudies\');
get_template_part( \'include/content\', \'foot\' ); 
get_footer();
?>
我花了很长时间才使分页正常工作,这样我就可以有:归档页:/case studies单页:/case studies/post title

使用自定义查询使我获得了大部分的方法。第1页和第2页的效果很好,但第3页之后的效果就不好了。我在官方WordPress论坛上发现了一个帖子,其中有人有同样的问题。通过将“设置>阅读>博客页面显示最多”更改为1,可以解决此问题。这对我也有用。我的自定义post-type归档页面上的所有分页都非常有效。

然而,这意味着现在我的博客和搜索结果页面每页只显示一篇文章。

有没有办法我可以将此更改为每页5篇帖子?

P、 我的主题包含此函数以提供分页。它用于博客和搜索结果页面。

function semi_pagination( $pages = \'\', $range = 4 ) {

     $showitems = ($range * 2) + 1;  

     global $paged;

     if( empty( $paged ) ) $paged = 1;

     if( $pages == \'\' ) {

         global $wp_query;

         $pages = $wp_query->max_num_pages;

         if(!$pages) {

             $pages = 1;

         }

     }   

     if(1 != $pages) {

         echo "<div class=\\"pagination pagination-centered clearfix nobottommargin topmargin\\" style=\\"font-size: 13px;\\"><ul>";

         if( $paged > 2 && $paged > $range + 1 && $showitems < $pages ) echo "<li><a href=\'" . get_pagenum_link( 1 ) . "\'>&lArr;</a></li>";

         if( $paged > 1 && $showitems < $pages ) echo "<li><a href=\'" . get_pagenum_link( $paged - 1 ) . "\'>&laquo;</a></li>";

         for ( $i = 1; $i <= $pages; $i++ ) {

             if ( 1 != $pages && ( !( $i >= $paged + $range + 1 || $i <= $paged - $range - 1 ) || $pages <= $showitems )) {

                 echo ( $paged == $i ) ? "<li><span class=\\"active\\">" . $i . "</span></li>" : "<li><a href=\'" . get_pagenum_link( $i ) . "\'>" . $i . "</a></li>";

             }

         }

         if ( $paged < $pages && $showitems < $pages ) echo "<li><a href=\\"" . get_pagenum_link( $paged + 1 ) . "\\">&raquo;</a></li>";

         if ( $paged < $pages-1 &&  $paged + $range - 1 < $pages && $showitems < $pages ) echo "<li><a href=\'" . get_pagenum_link( $pages ) . "\'>&rArr;</a></li>";

         echo "</ul></div>\\n";

     }

}

1 个回复
最合适的回答,由SO网友:Chris 整理而成

感谢米洛为我指出pre\\u get\\u posts挂钩。这正是我所需要的。

以下是我的更新代码:

Archive page code

<?php
   get_header(); 
   get_template_part( \'include/content\', \'head\' );
?>

<div class="postcontent nobottommargin<?php if( semi_option( \'blog_sidebar\' ) == \'left\' ) { echo \' col_last\'; } ?> clearfix">
<?php
        if ( have_posts() ) :
        ?>
        <div id="posts" class="small-posts clearfix">
        <?php
            while ( have_posts() ) : the_post();
            ?>

                            <div id="post-<?php the_ID(); ?>" <?php post_class(\'entry clearfix\'); ?>>
                                <?php
                                get_template_part( \'include/blog/casestudies/post\', \'standard\' );
                                ?>
                            </div>
            <?php                
            endwhile;
            get_template_part( \'include/blog/navigation\' );
            ?></div><?php
        else :
            get_template_part( \'include/blog/error\' );
        endif;
        ?>
</div>
<?php
get_sidebar(\'casestudies\');
get_template_part( \'include/content\', \'foot\' ); 
get_footer();
?>
然后我将此添加到functions.php 来自法典

function hwl_home_pagesize( $query ) {


    if ( is_post_type_archive( \'emp_case-studies\' ) ) {
        $query->set( \'posts_per_page\', 5 );
        return;
    }
}
add_action( \'pre_get_posts\', \'hwl_home_pagesize\', 1 );

结束

相关推荐

Custom template pagination

我有一个自定义的帖子类型“新闻”。我创建了id为55的“News”页面和一个自定义模板文件。我想实现分页。问题是,当我访问设置了页码的新闻时,会出现错误“404未找到”。URL类似于“/新闻/页面/2/”。我使用paginate_links 函数以显示分页。如何显示正确的页面?