WordPress教程

WordPress 中自定义不同归档页面每页显示条数

阿里云

WordPress 的后台设置中,我们可以通过 阅读 > 博客页面至多显示 设置每页最多显示的文章数目,但此设置只能将所有的类别(首页、分类目录页、标签页、作者页)显示的文章数都设置成一个固定值。

使用 WordPress 建站的过程中,如果我们想给不同归档页面(首页、分类目录页、标签页、作者页)自定义每页显示条数。比如首页每页最多显示 10 篇文章,分类页每页最多显示 20 篇文章,标签页每页最多显示 30 篇文章。这篇 WordPress 教程里,我们就向大家介绍一下具体的实现方法。

也想出现在这里?联系我们
创客主机

我们先来了解一下 WordPress 内部提供的函数来判断某个页面的类别:

  1. is_home()
  2. is_paged()
  3. is_single()
  4. is_category()
  5. is_tag()

上面的函数依次判断是否是首页、是否是分页显示、是否是文章页、是否是分类目录页、是否是标签页。Wordpress 中提供了各种钩子 (Hooks ),通过这些钩子我们可以修改 WordPress 中的一些内部行为。在查询的时候可以通过 posts_per_page 设置每页显示的文章数,如下:

  1. $args = array(
  2.     'caller_get_posts' => 1
  3.     'posts_per_page' => 10
  4. );
  5. query_posts($args);

上面的代码片段表示我们查询的时候需要每页最多显示 10 篇文章。我们可以通过重写 pre_get_posts 钩子来自定义不同归档页面每页显示的文章数量。如果我们想在首页每页最多显示 10 篇文章,分类页每页最多显示 20 篇文章,标签页每页最多显示 30 篇文章。切换到主题目录,打开 functions.php 文件,加入以下代码:

  1. function wp_posts_per_page($query) {
  2.     if (is_home()) {
  3.         $query->set('posts_per_page', 10);
  4.     }
  5.     if (is_category()) {
  6.         $query->set('posts_per_page', 20);
  7.     }
  8.     if (is_tag()) {
  9.         $query->set('posts_per_page', 30);
  10.     } //endif
  11. } //function
  12.  
  13. add_action('pre_get_posts', 'wp_posts_per_page');

在默认情况下,自定义内容类型的归档页面也会使用 wp 后台设置的文章数量,有时候为了展示作品、展示商品,需要自定义内容类型的文章数量和默认的归档页面不同,要达到预期的效果,可以采用如下方法:
假设自定义了一个 product 文章类型,对应也增加了一个 products 分类法,在主题 functions.php 中使用如下代码即可。

  1. function wp_posts_per_page($query){
  2.   //product为文章类型  products为对应分类法
  3.   //is_tax判断是否为分类页面
  4.   //is_post_type_archive判断是否为归档页面
  5.   //$query->is_main_query使得仅对页面主循环有效
  6.   //!is_admin避免影响后台
  7.   if((is_tax('products')||is_post_type_archive('product') )&& $query->is_main_query() && !is_admin()){
  8.     $query->set('posts_per_page', 15); //设置为15篇每页
  9.   }
  10.   return $query;
  11. }
  12. add_action('pre_get_posts','wp_posts_per_page');

WordPress 中自定义不同归档页面每页显示条数

已有 312 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!