设置SEO标题的代码(已测试可用)
要在 Astra 主题中为文章分类页面设置自定义的 SEO 标题(Meta Title,即显示在浏览器标签页上的标题),最推荐的方法是直接使用 WordPress 钩子 (Hook) 将标题过滤并替换。
以下是针对不同分类单独设置自定义标题的具体代码和操作步骤。
核心代码(添加到 functions.php)
可以将以下代码添加到你站点的子主题 functions.php 文件中(如果使用的是 Astra 主题,强烈建议使用子主题;或者安装 Code Snippets 插件来安全地添加 PHP 代码)。
/**
* Astra / WordPress 分类页面自定义 SEO 标题
*/
add_filter( 'pre_get_document_title', 'custom_category_seo_title' );
function custom_category_seo_title( $title ) {
// 确保当前页面是文章分类归档页
if ( is_category() ) {
// 获取当前分类的 ID
$category_id = get_queried_object_id();
// 根据分类 ID 或别名 (Slug) 设置自定义标题
switch ( $category_id ) {
case 12: // 将 12 替换为你实际的分类 ID
$title = '这是分类 12 的自定义 SEO 标题 | 网站名称';
break;
case 15: // 替换为另一个分类 ID
$title = '这是分类 15 的自定义 SEO 标题 | 网站名称';
break;
default:
// 如果分类没有单独设置,则显示默认的分类名称加后缀
$title = single_cat_title( '', false ) . ' - 精彩文章分类 | 网站名称';
break;
}
}
return $title;
}
如何修改代码?
- 获取分类 ID:在 WordPress 后台进入 文章 > 分类目录,点击需要编辑的分类,查看浏览器的 URL 链接。在链接中找到 tag_ID=数字,这个数字就是分类 ID(例如 tag_ID=12)。
- 替换标题文本:修改代码中 ‘这是分类 12 的自定义 SEO 标题 | 网站名称’ 为期望展示的 Meta 标题。
- 添加更多分类:通过复制 case ID: 和 break; 代码块来为更多不同的分类定制专属标题。
💡 更高效的替代方案:使用 SEO 插件
直接写代码维护起来不够直观。大多数 WordPress 站长会使用专业的 SEO 插件来完成此操作,这类插件不仅对 SEO 更友好,还能让你在后台直观地预览标题效果:
- Rank Math SEO(推荐):在其设置中启用模块后,编辑分类目录时可以直接输入 SEO 标题和描述。
- Yoast SEO:在后台的 文章 > 分类目录 中点击编辑具体分类,向下滚动即可看到填写 SEO 标题的选项框。
使用插件的好处在于不需要修改任何主题代码,且支持为所有的分类(包括自定义分类法)轻松设置独立标题。
设置SEO标题和描述的代码(未测试)
将以下代码添加到主题的 functions.php 中
这段代码会在后台的“分类目录”页面新增“SEO标题”和“SEO描述”的输入框,并保存数据。
// 添加分类自定义SEO字段
add_action( 'category_add_form_fields', 'add_category_seo_fields' );
add_action( 'category_edit_form_fields', 'edit_category_seo_fields' );
function add_category_seo_fields() {
?>
<div class="form-field">
<label for="category_seo_title">SEO 标题</label>
<input type="text" name="category_seo_title" id="category_seo_title" value="">
<p>输入该分类的自定义SEO标题。</p>
</div>
<div class="form-field">
<label for="category_seo_desc">SEO 描述</label>
<textarea name="category_seo_desc" id="category_seo_desc" rows="3"></textarea>
<p>输入该分类的自定义SEO描述(建议120-150字)。</p>
</div>
<?php
}
function edit_category_seo_fields( $term ) {
$term_id = $term->term_id;
$seo_title = get_term_meta( $term_id, 'category_seo_title', true );
$seo_desc = get_term_meta( $term_id, 'category_seo_desc', true );
?>
<tr class="form-field">
<th scope="row"><label for="category_seo_title">SEO 标题</label>
<td>
<input type="text" name="category_seo_title" id="category_seo_title" value="<?php echo esc_attr( $seo_title ); ?>">
<p class="description">输入该分类的自定义SEO标题。</p>
</td>
</tr>
<tr class="form-field">
<th scope="row"><label for="category_seo_desc">SEO 描述</label>
<td>
<textarea name="category_seo_desc" id="category_seo_desc" rows="3"><?php echo esc_attr( $seo_desc ); ?></textarea>
<p class="description">输入该分类的自定义SEO描述(建议120-150字)。</p>
</td>
</tr>
<?php
}
// 保存字段数据
add_action( 'edited_category', 'save_category_seo_meta' );
add_action( 'create_category', 'save_category_seo_meta' );
function save_category_seo_meta( $term_id ) {
if ( isset( $_POST['category_seo_title'] ) ) {
update_term_meta( $term_id, 'category_seo_title', sanitize_text_field( $_POST['category_seo_title'] ) );
}
if ( isset( $_POST['category_seo_desc'] ) ) {
update_term_meta( $term_id, 'category_seo_desc', sanitize_textarea_field( $_POST['category_seo_desc'] ) );
}
}
前台输出SEO代码
添加好字段后,使用以下代码让 Astra 主题在前台输出这些自定义元数据(放入 functions.php 或通过插件 Code Snippets 执行):
add_action( 'wp_head', 'render_category_seo_meta' );
function render_category_seo_meta() {
if ( is_category() ) {
$term_id = get_queried_object_id();
$seo_title = get_term_meta( $term_id, 'category_seo_title', true );
$seo_desc = get_term_meta( $term_id, 'category_seo_desc', true );
if ( $seo_title ) {
echo '<title>' . esc_html( $seo_title ) . '</title>' . "\n";
}
if ( $seo_desc ) {
echo '<meta name="description" content="' . esc_attr( $seo_desc ) . '">' . "\n";
}
}
}
👋 感谢您的观看!
© 版权声明
THE END
