the_title / the_content 的数据从哪来

作者: admin 分类: wordpress主题制作教程 发布时间: 2026-11-06 18:29

一个看起来“不需要参数”的函数

the_title() 括号里什么都不用传,它怎么知道要输出哪篇文章的标题?

你可能会想:因为它知道“现在是第几篇”。但它是怎么知道的?

答案藏在一个全局变量里

WordPress 有一个全局变量叫 $post,它永远指向“当前正在处理的那篇文章”。

the_post() 干的事,就是把这个 $post 换成下一篇。换完之后,所有读 $post 的函数,自然就拿到了新文章的数据。

the_title() 内部大致是这样:

function the_title() {
    echo get_the_title();   // get_the_title 不传参时,读的就是全局 $post
}

同理:

  • the_content() 读 $post->post_content
  • the_permalink() 读 $post 的 ID,拼出链接
  • the_author() 读 $post 的作者
  • the_time() 读 $post 的发布时间

它们全都不传参数,全靠 $post 这个“当前指针”。

所以 the_post() 到底做了什么

拆开看,the_post() 做了两件事:

  1. 把查询结果里的下一篇取出来;
  2. 把全局 $post 指向它(同时设置一堆相关变量,比如 $id、$authordata)。

没有第 2 步,the_title() 就不知道该读谁。

一个能验证的实验

在循环外面直接调 the_title(),会输出什么?

多半是空的,或者是“上一篇文章”的标题。因为这时 $post 还没被正确设置。

这就是下一篇要讲的问题——在循环外调模板标签,会出什么事。caogenbj 的 single.php 里就有一个现成的例子。

为什么要用全局变量

这种设计看起来“不干净”(全局变量嘛),但它是 WordPress 的历史选择,而且有它的道理:

  • 模板标签可以写得很短(不用每次传 ID);
  • 主题代码和 WordPress 核心解耦(核心负责设 $post,主题只管读);
  • 插件可以在中间插手(改 $post 的内容)。

代价是:你必须清楚“现在 $post 指向谁”。搞不清这一点,就会写出“标题对、内容错”这种诡异的 bug。

小结

一句话记住:the_title / the_content / the_permalink 都不传参数,它们读的是全局 $post;the_post() 负责把 $post 换成下一篇。

下一篇,看一个真实的“循环外用标签”翻车案例。

本系列导航

相关文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Powered by 草根站长笔记 © 2015-2026 草根站长笔记 Inc.版权所有,禁止转载