WordPress自定义文章类型的分页列表调用问题

分类栏目:用户体验 - 前端开发

415511

发布于 29 条评论

曾经为大家介绍过如何在Wordpress中创建自定义文章类型 ,具体如何创建可以看看 – WORDPRESS自定义文章类型∶添加公告功能 。但最近在做一个项目的时候,发现自定义文章类型的分页列表(previous_posts_linknext_posts_link)却无法调用出来。回去认真检查了本站的公告页面也是存在这个问题,获取不到分页列表(本站是自动无限翻页功能失效,通过下面的方法已经完美解决。)

wordpress-custom-post-type-pagination

在网上搜索了一番,发现这类问题存在的挺多的,但大部分问题出现在国外,国内估计比较少发现这类问题。通过查找资料,终于找到了解决方法,在这里分享给大家,希望可以给遇到此类问题的同学一个解决方案。

通常我们在创建完自定义文章类型后,就在后台新建一个页面,然后通过页面模版调用。分页的代码是出现在页面模版中,我们一般的调用代码是:

<?php
      $loop = new WP_Query( array( 'post_type' => 'projects' ) );
      while ( $loop->have_posts() ) : $loop->the_post();
?>

  <!-- 其他代码 --> 

<?php endwhile; ?>
<nav>
  <?php previous_post_link('&laquo; '); ?>
  <?php next_post_link(' &raquo;'); ?>
</nav>

通过这样子的调用,文章是可以显示完整。但下面的分页却不显示,语法也没有用错。在这里其实需要了解到wp_query的用法,在这里就不多介绍了,以后有机会再谈。那么我们来看看解决方法吧,将上面代码改成如下:

<?php 
  $temp = $wp_query; 
  $wp_query = null; 
  $wp_query = new WP_Query(); 
  $show_posts = 4;  //How many post you want on per page
  $permalink = 'Post name'; // Default, Post name
  $post_type = 'projects';

  //Know the current URI
  $req_uri =  $_SERVER['REQUEST_URI'];  

  //Permalink set to default
  if($permalink == 'Default') {
  $req_uri = explode('paged=', $req_uri);

  if($_GET['paged']) {
  $uri = $req_uri[0] . 'paged='; 
  } else {
  $uri = $req_uri[0] . '&paged=';
  }
  //Permalink is set to Post name
  } elseif ($permalink == 'Post name') {
  if (strpos($req_uri,'page/') !== false) {
  $req_uri = explode('page/',$req_uri);
  $req_uri = $req_uri[0] ;
  }
  $uri = $req_uri . 'page/';

  }

  //Query
  $wp_query->query('showposts='.$show_posts.'&post_type='. $post_type .'&paged='.$paged); 
  //count posts in the custom post type
 $count_posts = wp_count_posts('projects');

  while ($wp_query->have_posts()) : $wp_query->the_post(); 
  ?>

  <!-- 其他代码-->

  <?php endwhile;?>
  <nav>
  <?php previous_posts_link('« ') ?>
  <?php
  $count_post = $count_posts->publish / $show_posts;

  if( $count_posts->publish % $show_posts == 1 ) {
  $count_post++;
  $count_post = intval($count_post);
  };

  for($i = 1; $i <= $count_post ; $i++) { ?>
  <a <?php if($req_uri[1] == $i) { echo 'class=active_page'; } ?> href="<?php%20echo%20$uri%20.%20$i;%20?>" rel="external nofollow"  rel="external nofollow" ><?php echo $i; ?></a>
  <?php }
  ?>
  <?php next_posts_link(' »') ?>
  </nav>

  <?php 
  $wp_query = null; 
  $wp_query = $temp;  // Reset
  ?>

上面的代码可以根据你的需求,自行更改固定链接$permalink,同样$post_type更改成你所创建的自定义文章的名称。

代码来源:Designphilic

全部评论 / 29

  1. 一件頭

    应该如何添加呢?我新建了一个产品分类,post_tpye=product,那么在这分类发布的文章如何实现分页呢?还有一个问题就是类似你这网站,点击一个关键词tag,就会调用相关的文章出来,如何实现

    一件頭 2013-06-17
    20
  2. 不離 ╮

    博主,还有个问题
    $count_post = $count_posts->publish / $show_posts;
    这句需要改成
    $count_post = ceil($count_posts->publish / $show_posts); 要不分页还是有问题

    不離 ╮ 2013-06-17
    19
    1. Javin

      恩,这个是比较严谨一点。但是我使用上面方法到现在都没出现什么问题。

      1号 Javin 2013-06-17
  3. 迅雷牛

    神文啊

    迅雷牛 2013-06-17
    18
  4. 哥们有没有办法修改关于文章分页的一个问题呀,就是我有一个文章有几十页多,在底下是一次全显示完几十页页码数量,不知道怎么修改成一次最多只显示5页呢,到5页后点下次一页,然后从6再显示到10页,这样类推

    星跃 2013-06-17
    17
  5. 我自己新建了一个帮助文章类型。 帮助文章下面还有分类。

    但是现在想查这个帮助下面分类的文章 死活查询不出来

    helpcenter post_type //文章类型
    95 catID
    new WP_Query(‘post_type=helpcenter&cat=95’);

    试了很久才过来问的。

    陌陌 2013-06-17
    16
  6. 不好用,我的因家链接是/%postname%或者/%postname%/都试了,都是到第二页的时候就是404页面

    角落 2013-06-17
    15
    1. 不離 ╮

      if (strpos($req_uri,’/page/’) !== false) {
      $req_uri = explode(‘/page/’,$req_uri);
      $req_uri = $req_uri[0] ;
      }
      $uri = $req_uri . ‘/page/’;

      改成
      if (strpos($req_uri,’/page/’) !== false) {
      $req_uri = explode(‘/page/’,$req_uri);
      $req_uri = $req_uri[0] ;
      }
      $uri = $req_uri . ‘/page/’;

      我的就是这样的

      不離 ╮ 2013-06-17
      1. Javin

        好像两段代码贴的是一样的……

        1号 Javin 2013-06-17
        1. 不離 ╮

          额 page/ 换成/page/

          不離 ╮ 2013-06-17
  7. 博主你好,想问下你的这个代码的格式是你自己写的么?可否告知下,感觉你的这个挺简洁的,我用的是一个第三方的插件,虽然好看,但引入的js太多了!

    正仔 2013-06-17
    14
  8. 这些代码写在哪里,我小白,看不懂放哪里。求博主指教。谢谢,

    13
  9. 哎呀 刚看了,原来是 没传 jQuery 进去。
    问另外一个问题。
    公告的那也页面是怎么做的啊?

    12
    1. Javin

      是自定义文章类型的。https://www.jiawin.com/wordpress-post-announcement/

      1号 Javin 2013-06-17
      1. 公告的列表页怎么弄?求指教。

  10. 嘿嘿,我找到了解决方法, global $wp_query;全局这个函数即可,无需这么麻烦,而且不好用。

    kk 2013-06-17
    11
  11. 有没简单的办法啊,不知道该怎么用,很多模板都不知道该怎样套用。不能写一个分页函数,里面调用吗

    kk 2013-06-17
    10
  12. 发现了一个问题 如果 固定链接类型是/%postname%可以正常使用,而如果固定链接类型是/%postname%/的话 下一页链接就出错了,能否解决这个问题呢,突然去掉所有链接后面的/对seo不是很好啊

    9
    1. 没问题了…

  13. 问下博主 $permalink = ‘Post name’; 这个要怎么填啊 我用你的方法,还是404啊 $post_type我已经改了 我的固定链接类型是/%postname%/ 求解答

    8
    1. Javin

      确认下固定连接有没有问题?或者检查下固定连接是否重复到。

      1号 Javin 2013-06-17
      1. 果然是页面重复了

  14. 非常好,学习了! ;-) ;-) ;-) ;-)

    麦子 2013-06-17
    7
  15. 迟点试一下 :lol:

    6
  16. 博客做的不错啊,界面真好看,,多谢分享。。加油博主!!

    5
  17. wp_query 会造成无法翻页,现在网上流行的那个方法有BUG——翻到最后几页是空白,@Javin 的这个方法,我回去试试看。多谢分享。

    4
  18. 学习了,谢谢分享

    Yang 2013-06-17
    3
  19. 专业而详细,挺实用的,谢谢分享

    2
  20. 正需要,马克一个

    1