抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

本文主要介绍主题制作时会用到的循环(The Loop)的使用方法,以及在循环中使用的WordPress函数,解答上文《WordPress之主题制作》中参数的问题;同时会涉及到参数 $post ,本文也会详细介绍这个参数。

官方文档介绍:https://developer.wordpress.org/themes/basics/the-loop/
https://developer.wordpress.org/reference/classes/wp_post/

简介

循环是WordPress用于通过主题模板文件输出帖子的默认机制。在循环中,WordPress检索要显示在当前页面上的每个帖子,并根据主题说明对其进行格式化。

循环可以应用于但不限于以下地方:

  • 在博客首页显示帖子标题和摘要;
  • 在单个帖子上显示内容和评论;
  • 使用模板标签在单个页面上显示内容;
  • 显示“自定义帖子类型”和“自定义字段”中的数据。

详细说明及用法介绍

基本用法

1
2
3
4
5
6
7
<?php 
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// 显示内容
endwhile;
endif;
?>

上面就是循环的基本语句,将自己要显示的内容填写在上文注释部分即可。这段循环可以用在主页显示帖子标题和摘要上。

其中,利用 if 条件语句,先判断是否有帖子(have_posts()),再用 while 循环语句。注意: ifwhile 都需要结束语, if 对应的结束语是 endifwhile 对应的是 endwhile

  • have_posts():被调用时实际上是调用全局变量 $wp_query->have_posts() 成员函数,来简单检查一个全局数组(array)变量 $posts 的一个循环计数器,以确认是否还有post,如果有返回true(1),如果没有返回false(0)。
  • the_post():调用 $wp_query->the_post() 成员函数前移循环计数器,并且创建一个全局变量 $post (不是 $posts ),把当前的post的所有信息都填进这个 $post 变量中,以备接下来使用。

循环中常见的模板标签

  • next_post_link():指向当前帖子之后按时间顺序发布的帖子的链接
  • previous_post_link():指向当前帖子之前按时间顺序发布的帖子的链接
  • the_category() :与正在查看的帖子或页面相关的一个或多个类别
  • the_author() :帖子或页面的作者
  • the_content() :帖子或页面的主要内容
  • the_excerpt():帖子主要内容的前55个单词,后接省略号(…)或阅读全文的链接。您也可以使用帖子的“摘录”字段来自定义特定摘录的长度。
  • the_ID() :帖子或页面的ID
  • the_meta() :与帖子或页面关联的自定义字段
  • the_shortlink() :使用网站的网址和帖子或页面的ID的页面或帖子的链接
  • the_tags() :与帖子相关的一个或多个标签
  • the_title() :帖子或页面的标题
  • the_time():帖子或页面的时间或日期。可以使用标准的php日期函数格式进行自定义。

以上的函数需要在循环中,主要原因是因为它们需要设置全局变量 $post。所以只要能得到变量 $post ,即可调用上面的函数。所以在文章页(single)、页面(page),可以用下面的代码即可代替循环。

1
2
3
4
<?php if (have_posts()) : the_post(); ?>
// 页面内容
<?php the_content(); ?>
<?php endif; ?>

多个循环

在一个页面中,如果使用了循环,如果再次使用则会出错。例如在header.php中输出了文章标题,再在page.php中使用 <?php if (have_posts()) : the_post(); ?> 会出现错误,得到并非想要的内容。所以这时候就要使用多循环。

例如,您可能想要在页面顶部的目录列表中显示帖子的标题,然后在页面下方显示内容。由于查询没有被更改,因此当我们需要第二次遍历帖子时,我们只需要倒退循环。为此,我们将使用功能rewind_posts()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// 第一次循环
if ( have_posts() ) :
while ( have_posts() ) : the_post();
the_title();
endwhile;
endif;

// 使用rewind_posts()使第二次循环正常执行
rewind_posts();

// 第二次循环
while ( have_posts() ) : the_post();
the_content();
endwhile;
?>

关于参数$post

下面是常用的 $post 的变量索引,更多内容可以查看WP_Post的详细说明:

  • $post–>ID:当前文章的ID;
  • $post–>post_category:检索文章类别;
  • $post–>post_parent:父页面。用于创建自定义导航元素;
  • $post–>post_title:文章标题;
  • $post–>post_excerpt:文章摘要;
  • $post–>post_content:检索所有文章内容以及任何标记;
  • $post–>post_name:检索帖子的别名;
  • $post–>guid:文章 Url;
  • $post–>post_author:文章作者ID;
  • $post–>post_type:返回分类类型,包括自定义分类、page或者post;
  • $post–>post_date:检索发布文章的本地时间戳;
  • $post->post_modified:文章修改的本地时间;
  • $post–>post_status:检索文章的状态:发布,私有,草稿,等待复审;
  • $post–>comment_count:返回文章的评论数量。

上述参数可以根据大家需要修改主题文件,或者制作自己的主题。制作主题的教程可以到《WordPress之主题制作》一文去查看。


官方文档介绍:https://developer.wordpress.org/themes/basics/the-loop/
https://developer.wordpress.org/reference/classes/wp_post/
have_posts()、the_post()解析参考:https://www.cnblogs.com/drawblog/articles/8351327.html
$post参数参考:http://www.xuxiaoke.com/wpquestion/174.html

评论