WordPress 默认的分类目录(Categories)不提供自定义关键词(Keywords)字段,这对于希望进行精细化 SEO 优化的网站来说是一个限制。本教程将指导你如何通过添加自定义字段,为分类目录扩展“关键词”功能,并实现前台调用。
实现效果
成功添加后,在 WordPress 后台的“分类目录”添加/编辑页面,将出现一个“关键词”输入框,效果如下图所示:
(原图链接已失效,此处为占位说明) 成功添加后,后台分类编辑界面会新增一个“关键词”输入字段。
完整实现代码
将以下所有 PHP 代码添加到你当前主题的 functions.php 文件末尾。
1. 在添加分类页面创建字段
此函数用于在“添加新分类”页面输出关键词输入框。
// 为“添加分类”页面添加自定义字段
function ems_add_category_field() {
echo '<div class="form-field">
<label for="cat-keywords">关键词</label>
<input name="cat-keywords" id="cat-keywords" type="text" value="" size="40">
<p>请输入该分类的SEO关键词,多个关键词用英文逗号分隔。</p>
</div>';
}
add_action('category_add_form_fields', 'ems_add_category_field', 10, 2);
2. 在编辑分类页面创建字段
此函数用于在“编辑分类”页面输出关键词输入框,并显示已保存的值。
// 为“编辑分类”页面添加自定义字段
function ems_edit_category_field($tag) {
$saved_keyword = get_option('cat-keywords-' . $tag->term_id); // 获取已保存的值
echo '<tr class="form-field">
<th scope="row"><label for="cat-keywords">关键词</label></th>
<td>
<input name="cat-keywords" id="cat-keywords" type="text" value="' . esc_attr($saved_keyword) . '" size="40"/><br>
<p class="description">为 “' . $tag->name . '” 分类设置SEO关键词。</p>
</td>
</tr>';
}
add_action('category_edit_form_fields', 'ems_edit_category_field', 10, 2);
3. 保存字段数据
此函数负责在创建或编辑分类时,将表单提交的关键词数据保存到 WordPress 的 options 表中。
// 保存分类自定义字段数据
function ems_taxonomy_metadata($term_id) {
// 安全检查:验证非ce和权限
if ( ! isset( $_POST['cat-keywords'] ) || ! current_user_can('manage_categories') ) {
return;
}
$cat_meta_key = 'cat-keywords-' . $term_id; // 构造唯一的选项名,如 cat-keywords-13
$cat_meta_value = sanitize_text_field($_POST['cat-keywords']); // 清理输入数据
// 保存或更新数据
update_option($cat_meta_key, $cat_meta_value);
}
// 挂钩到分类创建和编辑动作
add_action('created_category', 'ems_taxonomy_metadata', 10, 1);
add_action('edited_category', 'ems_taxonomy_metadata', 10, 1);
前台调用方法
保存代码后,你可以在主题模板文件中调用已保存的分类关键词。
在分类/文章页面调用
以下代码示例展示了如何在分类归档页或单篇文章页面获取并显示当前主要分类的关键词。
<?php
// 获取当前分类(适用于分类页)或文章所属的第一个分类
if (is_category()) {
$current_cat = get_queried_object();
$term_id = $current_cat->term_id;
} else if (is_single()) {
$categories = get_the_category();
if (!empty($categories)) {
$term_id = $categories[0]->term_id; // 获取文章的第一个分类ID
}
}
if (isset($term_id)) {
$keywords = get_option('cat-keywords-' . $term_id);
if (!empty($keywords)) {
echo '<div class="category-keywords">分类关键词:' . esc_html($keywords) . '</div>';
}
}
?>
注意事项与优化建议
- 数据存储方式:本教程使用
update_option存储数据,简单易用,但当分类数量极大时可能影响options表性能。对于生产环境,更推荐使用 WordPress 的 Term Meta API(add_term_meta,get_term_meta)。 - 安全性:代码中已使用
sanitize_text_field()和权限检查,确保基础安全。 - 扩展性:此方法不仅可用于“关键词”,稍作修改即可为分类添加“描述”、“图标”、“颜色”等多种自定义字段。
- 清除数据:如需在删除分类时同步删除本字段数据,需要将函数挂钩到
delete_category动作,并执行delete_option('cat-keywords-'.$term_id)。
按照以上步骤操作,即可成功为 WordPress 分类目录添加并管理自定义关键词字段,增强网站的 SEO 能力。