曾经为大家介绍过如何在Wordpress中创建自定义文章类型 ,具体如何创建可以看看 – WORDPRESS自定义文章类型∶添加公告功能 。但最近在做一个项目的时候,发现自定义文章类型的分页列表(previous_posts_link
、next_posts_link
)却无法调用出来。回去认真检查了本站的公告页面也是存在这个问题,获取不到分页列表(本站是自动无限翻页功能失效,通过下面的方法已经完美解决。)
在网上搜索了一番,发现这类问题存在的挺多的,但大部分问题出现在国外,国内估计比较少发现这类问题。通过查找资料,终于找到了解决方法,在这里分享给大家,希望可以给遇到此类问题的同学一个解决方案。
通常我们在创建完自定义文章类型后,就在后台新建一个页面,然后通过页面模版调用。分页的代码是出现在页面模版中,我们一般的调用代码是:
<?php $loop = new WP_Query( array( 'post_type' => 'projects' ) ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <!-- 其他代码 --> <?php endwhile; ?> <nav> <?php previous_post_link('« '); ?> <?php next_post_link(' »'); ?> </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
应该如何添加呢?我新建了一个产品分类,post_tpye=product,那么在这分类发布的文章如何实现分页呢?还有一个问题就是类似你这网站,点击一个关键词tag,就会调用相关的文章出来,如何实现
博主,还有个问题
$count_post = $count_posts->publish / $show_posts;
这句需要改成
$count_post = ceil($count_posts->publish / $show_posts); 要不分页还是有问题
恩,这个是比较严谨一点。但是我使用上面方法到现在都没出现什么问题。
神文啊
哥们有没有办法修改关于文章分页的一个问题呀,就是我有一个文章有几十页多,在底下是一次全显示完几十页页码数量,不知道怎么修改成一次最多只显示5页呢,到5页后点下次一页,然后从6再显示到10页,这样类推
我自己新建了一个帮助文章类型。 帮助文章下面还有分类。
但是现在想查这个帮助下面分类的文章 死活查询不出来
helpcenter post_type //文章类型
95 catID
new WP_Query(‘post_type=helpcenter&cat=95’);
试了很久才过来问的。
不好用,我的因家链接是/%postname%或者/%postname%/都试了,都是到第二页的时候就是404页面
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/’;
我的就是这样的
好像两段代码贴的是一样的……
额 page/ 换成/page/
博主你好,想问下你的这个代码的格式是你自己写的么?可否告知下,感觉你的这个挺简洁的,我用的是一个第三方的插件,虽然好看,但引入的js太多了!
这些代码写在哪里,我小白,看不懂放哪里。求博主指教。谢谢,
哎呀 刚看了,原来是 没传 jQuery 进去。
问另外一个问题。
公告的那也页面是怎么做的啊?
是自定义文章类型的。https://www.jiawin.com/wordpress-post-announcement/
公告的列表页怎么弄?求指教。
嘿嘿,我找到了解决方法, global $wp_query;全局这个函数即可,无需这么麻烦,而且不好用。
有没简单的办法啊,不知道该怎么用,很多模板都不知道该怎样套用。不能写一个分页函数,里面调用吗
发现了一个问题 如果 固定链接类型是/%postname%可以正常使用,而如果固定链接类型是/%postname%/的话 下一页链接就出错了,能否解决这个问题呢,突然去掉所有链接后面的/对seo不是很好啊
没问题了…
问下博主 $permalink = ‘Post name’; 这个要怎么填啊 我用你的方法,还是404啊 $post_type我已经改了 我的固定链接类型是/%postname%/ 求解答
确认下固定连接有没有问题?或者检查下固定连接是否重复到。
果然是页面重复了
非常好,学习了!
迟点试一下
博客做的不错啊,界面真好看,,多谢分享。。加油博主!!
wp_query 会造成无法翻页,现在网上流行的那个方法有BUG——翻到最后几页是空白,@Javin 的这个方法,我回去试试看。多谢分享。
学习了,谢谢分享
专业而详细,挺实用的,谢谢分享
正需要,马克一个