WordPress 自定义字段由两部分组成:键(key) 和 值(value)。你可以把它理解为一组“属性-内容”的数据对。比如你希望在文章中显示“预计阅读时长”,就可以设置键为 reading_time
,值为 5 分钟
;或者为转载文章添加来源信息,键为 source_name
,值为 知乎专栏
。
当我们为某篇文章或页面添加自定义字段时,所填写的数据会与该内容一一绑定。换句话说,字段的内容是“归属”当前文章或页面的,它不会影响其他内容。这也正是自定义字段强大的地方 —— 你可以为每一篇文章设置完全不同的扩展信息,并在前端有选择地展示它们。
1. WordPress 自定义字段介绍
WordPress 自定义字段(Custom Fields)是一种原生支持的元数据机制,允许用户为文章、页面或自定义内容类型附加额外的信息。每一组字段由键(key)和值(value)组成,键用于标识字段名称,值则为实际内容。这一机制广泛应用于扩展文章功能,例如设置封面图地址、附加资源链接、记录阅读时间或评分数据等。

自定义字段的数据被存储于数据库的 wp_postmeta
表,并与具体的文章或页面一一对应。通过主题模板中的函数(如 get_post_meta()
),开发者可以将这些字段的值动态渲染到前端,实现更高自由度的页面定制。这一机制不仅适用于个性化展示,也为高级内容模型开发提供了基础。
2. WordPress 自定义字段使用
2.1 开启原生自定义字段界面
从 WordPress 5.0 开始,自定义字段被默认隐藏。你可以通过以下方法开启:
- 编辑文章或页面
- 点击右上角「三个点」 →「偏好设置」
- 进入「面板」 → 勾选「自定义字段」
这时,编辑界面底部就会出现「自定义字段」模块,如上图所示。
2.2 手动添加字段
- 键入字段名称和值,如:
subtitle
:这是一篇关于 SEO 的教程cover_image
:输入图片链接地址
2.3 在主题中调用字段
在主题模板中使用 get_post_meta()
获取字段值,例如:
<?php echo get_post_meta(get_the_ID(), 'subtitle', true); ?>
3. 本站在用自定义字段分享
由于 Kevin's Space 所使用的主题功能完善,配合多个插件已能覆盖大部分需求,因此并不依赖大量额外的自定义字段。目前主要使用的字段集中在几个常用场景,例如:为页面单独设置描述信息、手动添加 noindex
属性、或控制页面是否被纳入 RSS 输出。
3.1 自定义字段在 SEO 优化中的应用
<?php
// 获取优化后的页面描述信息
function getOptimizedDescription($post) {
if (!is_object($post) || !isset($post->ID)) {
return '';
}
// 优先使用自定义字段 "description"
$customDescription = get_post_meta($post->ID, "description", true);
if (!empty($customDescription)) {
return trim(strip_tags($customDescription));
}
// 否则自动截取正文前 180 字符作为默认描述
$defaultDescription = strip_tags(mb_substr($post->post_content, 0, 180, 'UTF-8'));
return trim($defaultDescription);
}
global $post;
// 判断是否设置了 noindex_post 字段,如设置则输出 robots 元标签
$noIndexFlag = (is_object($post) && isset($post->ID))
? get_post_meta($post->ID, 'noindex_post', true)
: false;
if ($noIndexFlag) {
echo '<meta name="robots" content="noindex,nofollow">';
}
// 设置 description 描述标签
$description = '';
// 首页或列表页使用默认描述
if (!is_single() && !is_page() || is_front_page()) {
$description = "一个优雅的个人博客,除了记录博主的日常见闻,还分享一些关于摄影、后期、网站建设等的实用经验和免费资源,念念不忘,必有回响!";
// 单页或文章页则使用内容摘要或自定义字段
} elseif (is_single() || is_page()) {
$description = (is_object($post) && isset($post->ID))
? getOptimizedDescription($post)
: '';
}
// 输出 meta 标签
echo '<meta name="description" content="' . esc_attr($description) . '">';
?>
以上代码片段是我直接写入 header.php
中的,主要围绕两项自定义字段展开,分别用于优化页面描述和控制搜索引擎索引行为,我用 AI 生成了注释,各位可以根据自己需要改改放自己 WordPress 上边。
第一项是 description
字段。常规情况下,函数会自动提取文章开头的一段正文内容(约 180 字符)作为页面的 <meta name="description">
,用于搜索引擎摘要显示。但对于某些内容结构特殊或需要精确控制描述的页面,我会手动添加 description
字段。方法是在文章编辑界面下方的“自定义字段”模块中,从下拉菜单中选择 description
(首次使用时需手动创建),然后填写希望输出的说明文本。前端代码会优先读取该字段并输出为 description
标签,确保内容更具针对性和语义清晰度。

description
& noindex_post
实际效果另一项是 noindex_post
字段,用于控制是否向搜索引擎发送 noindex,nofollow
指令。在某些情况下(如临时页面、隐私内容或低质量文稿),我并不希望它们被搜索引擎收录。这时,只需在该页面的自定义字段中添加 noindex_post
,并将值设为任意非空内容,系统就会在页面头部自动添加对应的 <meta name="robots">
标签。这两项设置均是出于 SEO 的优化考虑,帮助提升页面质量控制和搜索引擎友好度。
3.2 利用自定义字段改变页面和展现
如果你的网站内容较为丰富,包含插件、图片、视频等多种媒体内容,同时又希望尽可能优化性能,那么对于一些个性化较强的样式或动画效果,最实用的做法就是:不全局加载,而是仅在特定文章中按需输出。这样可以通过自定义字段的方式,将特定样式或脚本直接插入到某篇文章的 <head>
或页脚,从而避免对整个站点的加载造成负担,实现定制化与性能之间的平衡。
// 将自定义字段 custom_head_code 的值输出到 <head></head>
function add_custom_code_in_head() {
if (is_single() || is_page()) {
global $post;
$custom_head_code = get_post_meta($post->ID, 'custom_head_code', true);
if (!empty($custom_head_code)) {
echo $custom_head_code;
}
}
}
add_action('wp_head', 'add_custom_code_in_head');
将上述代码添加到 functions.php
中后,WordPress 将支持一个名为 custom_head_code
的自定义字段,用于向页面 <head>
区域动态注入自定义样式或脚本。为了演示效果,我在上边截图的区块属性“额外 CSS 类”中填入了一个特定的值,利用自定义字段往头部输入了一段简单的 CSS,使图文排版更加协调、精致。
为了页面简洁美观,我的文章目录通常默认收起,隐藏在屏幕左侧的那条红色小块中。但在少数内容较多、需要读者快速定位的文章中,我会通过 custom_head_code
字段,在页面头部插入一条 JavaScript,使目录在加载时自动展开,例如本文即是如此。这样的做法兼顾了整体页面的整洁性与阅读体验的灵活性。
// 添加 exclude_from_rss 自定义字段从 RSS 中排除特定文章
function exclude_posts_from_rss($query) {
if ($query->is_feed && !is_admin()) {
$meta_query = array( // 存在本字段则排除
array(
'key' => 'exclude_from_rss',
'compare' => 'NOT EXISTS'
)
);
$query->set('meta_query', $meta_query);
}
}
add_action('pre_get_posts', 'exclude_posts_from_rss');
当文章存在名为 exclude_from_rss
的自定义字段时,该页面将不会被输出到 WordPress 的 RSS 源中。比如近期我发布了多篇面向新手的 WordPress 基础教学文章,而订阅我博客的都是大佬,这类内容对他们来说没什么参考价值。为了不“打扰”他们的阅读体验,我就主动用这个字段屏蔽了这些文章的 RSS 输出,算是一次“自我静音”,哈哈哈。
怎么样,自定义字段是不是挺好玩?除了上面提到的这些应用场景,其实你还可以根据实际需要,实现更多实用又灵活的小功能,思路打开,实现万千可能!
4. 写在最后
4.1 Advanced Custom Fields 插件
如果你觉得上述步骤要写代码很麻烦的话,可以试试 Advanced Custom Fields 插件。它专为可视化管理自定义字段而设计。它支持文本、图像、选项框、日期、WYSIWYG 编辑器等多种字段类型,并可通过字段组和条件逻辑灵活地绑定到文章、页面、自定义文章类型、分类甚至用户资料中。ACF 提供了清晰的后台操作界面,让你无需编写代码即可实现复杂的数据扩展与结构管理。
在前端调用上,ACF 提供了 get_field()
和 the_field()
等简单直观的函数,方便在模板中输出字段内容。免费版功能已覆盖大部分场景,而付费版 ACF Pro 进一步提供重复字段、灵活内容、选项页等高级特性。对于希望在 WordPress 中实现结构化内容建模、字段扩展或页面功能定制的用户来说,ACF 是一个高效、稳定、灵活的解决方案。
4.2 删除无效的 WordPress 自定义字段
自定义字段虽然灵活强大,但在日常使用中,比如测试主题、安装插件或调试功能时,往往会残留大量不再使用的无效字段。这些“历史遗留字段”可能会堆积在数据库中,影响性能或造成混乱。建议定期清理,可以参考「删除无效的 WordPress 自定义字段」这篇文章,按步骤操作即可。操作前务必先备份数据库,以防误删重要数据。
[…] 可以利用区块样板、自定义字段来进阶使用古腾堡编辑器,合理使用这些功能将大大的提高我们的创作效率。 […]