信科网络 · 11 年只做 WordPress | 建站 / 主题 / 插件 / 商城 / 迁移 / 托管 | 累计服务 3000+ 企业 | 源码全交付
服务热线:13280692153 邮箱:web@wordpressx.com
工作日 08:30-18:0013280692153 免费诊断
首页/WordPress 教程/WordPress 常用函数:模板调用与函数手册用法
BLOG

WordPress 常用函数:模板调用与函数手册用法

分类 发布 2026-10-03

模板里该写 the_title() 还是 get_the_title(),这个问题几乎每周都会冒出来。一句话答案:the_ 开头的是直接输出,get_ 开头的是返回字符串。前者不返回值,后者不输出。搞混的结果通常很直观——标题跑到页面最顶上、或者链接里显示一片空白。

一、the_ 与 get_ 的分水岭

函数 行为 返回值 典型用法
the_title() 直接 echo 到当前位置 无 循环内输出标题
get_the_title() 返回字符串 string 拼接、比较、塞进变量
the_content() 输出并执行 the_content 过滤器 无 正文区
get_the_content() 返回原始内容,不跑过滤器 string 二次处理、截取摘要
get_permalink() 返回永久链接 string 拼 href 属性

最关键的一行差别在 the_content() 和 get_the_content():前者会执行 the_content 过滤器,短代码、自动段落、图片懒加载、插件插入的广告都会生效;后者拿到的是数据库里的原始字符串,短代码会原样显示成 这样的文本。要用后者又想让短代码生效,得手动补一句 echo apply_filters( 'the_content', get_the_content() );,但这等于绕了一圈,不如直接用前者。

二、五个高频函数的具体差别

the_title() 的三个参数

签名是 the_title( $before, $after, $display )。第三个参数传 false 时它就不输出了,转而返回字符串,等价于 get_the_title()。所以在循环外想拿标题又不想自己拼 echo,可以直接 the_title( '', '', false )。

在循环外调用必须显式传 post ID:the_title( '<h2>', '</h2>', true, 128 )。不传的话它读的是全局 $post,很容易输出成上一篇文章的标题,这种「标题对不上内容」的问题在自定义循环里特别常见。

the_content() 只能在循环内用

它依赖全局 $post。在循环外想输出某篇文章正文,必须先用 setup_postdata(),用完再 wp_reset_postdata()。少了重置这一步,后面的查询会拿到错乱的全局变量,表现为侧边栏显示成当前文章的信息。

get_permalink() 与 get_the_ID()

get_permalink() 接受文章 ID 或 WP_Post 对象,不传参数就用当前文章。注意分类和标签不能用它,得用 get_term_link();作者页用 get_author_posts_url()。用错函数不会报错,只会返回一个 404 链接,这种问题靠肉眼几乎看不出来。

get_the_ID() 返回当前循环里的文章 ID,循环外返回 false。它最常见的用途是给 get_post_meta()、get_the_post_thumbnail() 传参。

WP_Query:自己写循环

先补一个容易被忽略的细节:WP_Query 的 category_name 参数用的是别名(slug),不是分类名;cat 参数才是分类 ID。想按多个分类取交集,用 category__in 传 ID 数组;想按自定义字段筛,用 meta_query。参数写错时它不会报错,只会安静地返回空列表,所以第一次写完循环先 var_dump( $q->request ); 看一眼实际执行的 SQL,比反复改参数快。

$q = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 6,
    'category_name'  => 'jishuziliao',
    'meta_key'       => '_thumbnail_id',
    'orderby'        => 'date',
    'order'          => 'DESC',
    'no_found_rows'  => true,
) );

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        echo '<h3><a href="' . esc_url( get_permalink() ) . '">'
            . esc_html( get_the_title() ) . '</a></h3>';
    }
    wp_reset_postdata();
} else {
    echo '<p>暂无内容</p>';
}

no_found_rows 设为 true 会跳过 SQL 里的 SQL_CALC_FOUND_ROWS,不需要分页时能省一次全表统计。不要用 query_posts(),它会覆盖主查询,导致分页错乱、条件判断失效,是主题里最该删掉的函数之一。

三、函数写在模板的哪个位置

文件 必须调用的函数 漏掉会怎样
header.php wp_head()、body_class()、language_attributes() 插件样式与脚本全部丢失,SEO 插件的 meta 不输出
footer.php wp_footer()、wp_body_open() 统计代码、部分弹窗、后台工具栏不显示
single.php the_content()、wp_link_pages() 正文空白或分页文章只显示第一页
functions.php register_nav_menus()、add_theme_support() 后台「外观 → 菜单」报错或缩略图无法设置
sidebar.php dynamic_sidebar()、is_active_sidebar() 小工具区显示为空

wp_head() 和 wp_footer() 是最容易被新手删掉的两个调用。主题作者觉得「head 里东西太多」直接删掉,结果就是插件全部失效,然后开始怀疑插件有 bug。这两个函数不是可选项。

另一组常被写错的函数是模板引入:get_header()、get_footer()、get_sidebar()、get_template_part()。它们全都是「直接引入并输出」,不是返回路径。想要更细的控制,用 get_template_part( 'template-parts/card', get_post_type() ),它会依次找 card-post.php、card.php 再回落到父主题,是子主题做局部改版最省事的路子。这里传的是相对主题根目录的路径,不要带 .php 后缀。

四、条件判断:先判断再输出

常用的一共就那几个:is_single() 判断单篇文章(自定义文章类型的单页也返回 true),is_page() 判断页面,is_category() 判断分类归档,is_archive() 覆盖所有归档,is_front_page() 和 is_home() 则分别对应「首页设置的静态页」和「文章列表页」,两个都返回 true 的情况只在首页设为最新文章时出现。

if ( is_single() && in_category( 'jishuziliao' ) ) {
    echo '<p class="x-note">本文由信科网络技术团队整理。</p>';
} elseif ( is_page( 'contact' ) ) {
    echo '<p>工作时间 9:00 - 18:00。</p>';
} elseif ( is_category( 'wordpress' ) ) {
    the_archive_description( '<div>', '</div>' );
}

一个必须记住的时机问题:这些条件函数依赖主查询,在 init 或 functions.php 顶层直接调用会返回 false,正确的位置是挂在 wp 或 template_redirect 之后。把判断写进 wp_head 回调里也是安全的。

条件判断写得多了会变成层层嵌套,这时候换成 get_queried_object() 往往更干净:它直接返回当前请求对应的对象,可能是 WP_Post、WP_Term 或 WP_User,用 instanceof 判断类型再做分支,比堆七八个 is_* 可读性高得多。

五、查函数手册的方法

官方手册在 developer.wordpress.org/reference/functions/,直接拼函数名就能到页面。看四块内容就够:Parameters 里每个参数的类型和默认值、Return 的返回类型、Source 里指向的源文件行号、User Contributed Notes 里的实际坑。

  • 参数顺序记不住时看签名,不要凭印象写,PHP 不会因为参数顺序错了就报错。
  • 函数带不带 _e() 后缀决定是否输出,带 esc_ 前缀的是转义版本。
  • 不确定某个函数是否存在,function_exists() 包一层再调用,兼容性更稳。
  • 本地源码在 wp-includes/post-template.php、general-template.php 里,直接搜 function the_title 比翻文档快。

调试时用 WP-CLI 直接打印返回值,比写 var_dump 到模板里干净得多:

另外注意手册页顶部的版本标注。看到 @deprecated 就不要再用,比如 the_permalink() 本身没废弃但同类的 get_bloginfo( 'url' ) 已经建议换成 home_url()。函数参数里写「Since 5.5.0」的,说明老版本没有这个参数,主题要兼容多版本时得先判断 get_bloginfo( 'version' ) 或直接用 function_exists() 兜一层。

wp eval 'var_dump( get_permalink( 12 ) );'
wp eval 'print_r( get_post_meta( 12 ) );'

六、子主题里怎么「覆盖」函数

首先要明确一点:PHP 函数不能重定义。在子主题里再写一个同名函数,页面直接白屏并报 Fatal error: Cannot redeclare the_title()。可行的做法只有三种:

  1. 可插拔函数。WordPress 里少数核心函数用 if ( ! function_exists() ) 包着,比如 wp_mail()、get_option(),这类可以在插件里先定义。数量有限,不能指望。
  2. 用过滤器改输出。这是常规做法,改标题、摘要、正文都走这条路。
  3. 覆盖模板文件。把父主题的 single.php 复制到子主题同名路径,模板里的标签函数调用自然就变了。
// 子主题 functions.php:给循环内的标题追加站点名
add_filter( 'the_title', function ( $title, $id ) {
    if ( is_admin() || ! in_the_loop() || ! is_main_query() ) {
        return $title;
    }
    return $title . ' | 信科网络';
}, 10, 2 );

这个回调里的三个判断缺一不可:is_admin() 防止后台列表被改乱,in_the_loop() 防止菜单和面包屑被污染,is_main_query() 防止侧边栏的推荐位标题被追加后缀。少一个就会出现「后台文章列表标题全变了」这类问题。

七、几个反复出现的坑

  • 在 header.php 里直接写 the_title(),结果输出的是第一篇文章的标题。改成 wp_title() 的替代方案 add_theme_support( 'title-tag' )。
  • 用 get_the_excerpt() 拿不到内容,因为它在循环外返回空字符串,需要传 post ID。
  • 自定义循环结束忘了 wp_reset_postdata(),导致分页和面包屑全乱。
  • 把 the_permalink() 塞进 href,结果链接出现在页面上方,页面结构被撑破。
  • 用 the_content() 输出自定义字段里的富文本,短代码不解析,因为字段内容没进过过滤器。

如果模板改完之后整站白屏,先按白屏排查的顺序定位语法错误,再看主题定制里关于子主题结构的说明。函数用错导致的 404 链接,可以对照404 处理里的日志方法确认来源。要从零写一套模板标签的封装,插件定制那篇里的钩子写法可以配合使用。后台不熟悉的话,先看后台入门熟悉菜单位置。

INDUSTRIAL BELT

扎根中国制造产业带
懂工厂,才懂出海

从胶东半岛到珠三角,从长三角到中原腹地,每一片产业集群都有自己的出口节奏与买家画像。信科网络长期扎根产业一线,把工厂的产品语言翻译成海外采购商听得懂的搜索语言,让每一分投入都对着真实的询盘去。

fengjie

奉节外贸网站建设

奉节县位于重庆市东部,地处四川盆地东端,地理坐标为东经109°1′17″—109°45′58″,北纬30°29′19″—31°22′33″。县境东邻巫山县,南界湖北省恩施土家族苗族自治州,西连云阳县,北接巫溪县。境内有…

jinfeng

金凤外贸网站建设

金凤区于2002年11月1日成立,是宁夏回族自治区首府银川市的市辖区之一,位于市区中部,东到唐徕渠,西到包兰铁路,南接永宁县,北临贺兰县,辖良田、丰登2个镇,上海西路、北京中路、长城中路…

jingxian

景县外贸建站

景县位于河北省东南部,大运河西岸,全县辖9镇7乡,849个行政村,总面积1183平方公里。全县呈簸箕形,由西南向东北逐渐倾斜坦,最高点海拔25米,最低点14.1米。属暖温带半湿润大陆性气候,四季…

wuzhong

吴忠外贸建站

吴忠市位于宁夏回族自治区中部,东邻陕西定边县,西北和东北与内蒙古自治区阿拉善左旗、鄂托克前期接壤,西南和东南与甘肃靖远县、环县毗邻,北连永宁、陶乐两县,南接海原、固原两县,面积339…

guyuan

固原WordPress建站

固原地区位于宁夏回族自治区南部,东西南三面与甘肃毗邻,北部与本区中卫、同心两县接壤,总面积16783平方公里,辖固原、海原、西吉、隆德、彭阳、泾源县,总人口186.85万人,其中回族占47.6%,…

nanan

南岸WordPress建站

南岸区,是重庆都市区(重庆主城区),重庆大都市区,地处重庆市西南部。南岸区是以城市为主的都市工业区、中央商务区、国际会展区、风景旅游区。南岸区东部、南部接巴南区,西濒九龙坡区、渝…

shizhu

石柱Shopify建站

石柱土家族自治县简称石柱县,位于重庆市东部、长江南岸、山峡库区腹心,是集少数民族自治县、三峡库区淹没县、国家扶贫工作重点县于一体的特殊县份。幅员面积3012平方公里,辖32个乡镇,总人…

yunhe

运河Shopify建站

运河区,隶属于河北省沧州市,也是沧州市政府所在地,因京杭大运河贯穿全境而命名。运河区位于沧州市区西部,总面积117.7平方公里,人口30.9万(2013年),辖1乡1镇、6个街道办事处,63个行政…

yuanzhou

原州外贸推广

原州区,隶属于宁夏回族自治区固原市,地处宁夏南部,六盘山东北麓,黄土高原中西部,东邻彭阳县,南接泾源县,西连西吉县,北靠海原县、同心县,东北、西南分别与甘肃环县、隆德县毗壤,是固…

beidaihe

北戴河外贸推广

北戴河海滨地处河北省秦皇岛市中心的西部。是秦皇岛的城市区之一!受海洋气候的影响,夏无酷暑,冬无严寒,常年保持一级大气质量,没有污染,没有噪音,城市森林覆盖率54%,人均绿地630平方米…

wushan

巫山Google SEO

巫山位于重庆市东北部,三峡库区腹心,素有“渝东门户”之称,地跨长江巫峡两岸。东邻湖北省巴东县,西接奉节县,南与湖北省建始县毗连,北与巫溪县及神农架林区接壤。县城位于大宁河与长江交汇…

xiongxian

雄县Google SEO

河北省保定市雄县位于东经116°06',北纬38°59'。平均海拔10米。处于冀中平原的京、津、保三角腹地,南倚“华北明珠”白洋淀,北靠“京南小香港”___白…

pengshui

彭水GEO优化

彭水苗族土家族自治县位于重庆直辖市东南部,处武陵山区,居乌江下游。北接湖北省,南连贵州省。全县辖10镇29乡,共274个村、26个居委,1785个村民小组、184个居民小组。2001年底,全县有17.55…

fengdou

丰都GEO优化

丰都县位于重庆市版图中心,东经107°28′03″-108°12′37″,北纬29°33′18″-30°16′25″之间,呈西北—东南走向分布,南北长87km,东西宽54km,幅员面积2901km2。长江横穿县境47km,水上距离重庆主…

jizhou

冀州谷歌SEM

冀州市隶属河北省衡水市,地处华北平原腹地,北距首都300公里,西距省会石家庄110公里,辖区总面积918平方公里,东与枣强县(衡水)为邻,南与南宫市、新河县(邢台)接壤,西与宁晋县(邢台)…

jiangbei

江北谷歌SEM

江北区,隶属于重庆市,是主城核心区之一。位于长江、嘉陵江交汇处北岸,东南西三面分别与巴南、南岸、渝中、沙坪坝四区隔江相望,北与渝北区接壤。至2015年底,江北区幅员面积为220.77平方千…

qianjiang

黔江Facebook广告

重庆市黔江区位于重庆市的东南边缘,地处武陵山腹地,东临湖北省的咸丰县,西界彭水县,南连酉阳县,北接湖北利川市,是渝、鄂、湘、黔四省市的结合部,素有”渝鄂咽喉”之称。另外…

xinhua

新华Facebook广告

新华区隶属于河北省沧州市,地处沧州市区东半部,与运河区以清池大道为界,行政区域总面积88.5平方千米。新华区属暖温带半湿润大陆性季风气候,四季分明,日照充足。截至2014年,新华区下辖5个…

anxin

安新Yandex推广

安新县位于河北省中部,县境东与雄县、任丘相连;南与高阳接壤;西与清苑、徐水交界;北与容城毗邻。总面积738.6平方公里。县人民政府所在地安新镇是安新县政治、经济、文化和交通中心,北距…

yongning

永宁Yandex推广

永宁县地处宁夏平原中部,东临黄河,西倚贺兰山,是宁夏回族自治区首府银川市的郊县。全县国土面积1020平方公里,辖五镇一乡一个街道办事处,总人口20.4万人,有汉、回、满等13个民族,其中回…

yuzhong

渝中TikTok推广

渝中区,位于长江上游地区、重庆大都市区,属重庆主城九区之一。地处在长江、嘉陵江交汇地带,由于两江环抱,形似半岛,又名渝中半岛。渝中区作为重庆市政治、经济、文化以及商贸流通中心,别…

为什么一定要选懂产业带的出海服务商?建材丝网的欧洲建筑商看资质与交期,工业橡塑的中东工程商问耐温与工况,毛皮服饰的俄罗斯分销商算的是季节与毛利。买家不同,决策逻辑就不同;信科网络把这些差异拆进网站结构、关键词地图和投放策略里,用他们习惯的方式出现在他们搜索的地方。