使用分页时,模板标记和样式消失

时间:2015-04-08 19:05:20

标签: php wordpress pagination

我试图在我的自定义wordpress主题中创建一个分页,但我无法解决问题。基本上我所拥有的是一个名为" Portfolio Page"的自定义页面模板。它位于page-portfolio.php,我每页最多显示5个帖子。

当我点击转到包含较旧或较新帖子的下一页时,我会转到portfolio/page/page-number-here/的网址,而原始网址为portfolio/,其中包含所有标记和内容。当网址不再位于portfolio/时,这会导致所有标记和样式消失。如何使旧版或新版帖子加载到同一模板中?

我一直在搜索手抄本并支持答案,但我甚至找不到其他有此问题的人。我很确定我错过了导致这种情况发生的重要事情。

这是我的page-portfolio.php

<?php /* Template Name: Portfolio Page */ ?>

<?php get_header(); ?>

<?php

  $num_posts = ( is_front_page() ) ? 1 : 5;

  $args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => $num_posts
  );

  $query = new WP_Query( $args );
?>

<section id="portfolio-wrapper">
  <ul id="portfolio-list" class="list-reset">

  <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

    <li class="clear-fix portfolio-piece">
      <h1 class="portfolio-piece-title"><?php the_title(); ?></h1>
      <div class="portfolio-piece-gallery"><?php the_field('images'); ?></div>
      <div class="portfolio-piece-content"><?php the_content(); ?></div>
    </li>

  <?php endwhile; ?>

  </ul>
  <div class="pagination-wrapper">
    <?php 
      if ( function_exists( 'pagination' ) ) {
        pagination( $query->max_num_pages );
      } 
    ?>
    <?php endif; wp_reset_postdata(); ?>
  </div>
</section>

<?php get_footer(); ?>

我正在使用看似这样的分页功能:

function 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\"><span>Page ".$paged." of ".$pages."</span>";

     if ( $paged > 2 && $paged > $range+1 && $showitems < $pages) { 
       echo "<a href='".get_pagenum_link( 1 )."'>&laquo; First</a>";
     }

     if ( $paged > 1 && $showitems < $pages ) {
       echo "<a href='".get_pagenum_link( $paged - 1 )."'>&lsaquo; Previous</a>";
     }

     for ( $i = 1; $i <= $pages; $i++ ) {
       if ( 1 != $pages &&( !( $i >= $paged + $range + 1 || $i <= $paged - $range - 1 ) || $pages <= $showitems ) ) {
         echo ( $paged == $i ) ? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link( $i )."' class=\"inactive\">".$i."</a>";
       }
     }

     if ( $paged < $pages && $showitems < $pages) {
       echo "<a href=\"".get_pagenum_link( $paged + 1 )."\">Next &rsaquo;</a>";
     }

     if ($paged < $pages - 1 &&  $paged + $range - 1 < $pages && $showitems < $pages) {
       echo "<a href='".get_pagenum_link($pages)."'>Last &raquo;</a>";
     }

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

1 个答案:

答案 0 :(得分:0)

有一些问题可能会导致您遇到的问题。首先,它是wordpress中一个记录良好的问题,让页面和帖子类型共享相同的slug - &#39;投资组合&#39;在你的情况下。由于您使用自定义模板而不是此帖子类型的归档模板,因此一个简单的解决方法是在注册时禁用投资组合帖子类型的归档 -

'has_archive' => false

https://codex.wordpress.org/Function_Reference/register_post_type

我还会通过重新保存永久链接设置来更改此重写规则,以确保这不会导致任何问题。

此外,如果您在查询中不包含分页变量,则分页将无法正常工作。首先声明它,然后包含在您的查询中:

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
    'post_type'      => 'portfolio',
    'posts_per_page' => $num_posts,
    'paged'          => $paged,
);

$query = new WP_Query( $args );

https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters