博客 / WordPress/ WordPress 自定义页面标题:删除 wp_head() 中的默认 title 标签并实现个性化显示

WordPress 自定义页面标题:删除 wp_head() 中的默认 title 标签并实现个性化显示

WordPress 自定义页面标题:删除 wp_head() 中的默认 title 标签并实现个性化显示

为什么要自定义 WordPress 标题标签?

WordPress 默认通过 wp_head() 函数在页面头部输出 <title> 标签。有时,为了满足特定的 SEO 策略、品牌展示或页面设计需求,开发者需要完全控制标题的生成逻辑和显示内容。这就需要先移除默认的标题输出,然后实现自定义的标题显示方案。

方法一:移除默认标题并创建自定义函数

此方法分两步:首先移除 WordPress 核心的标题渲染动作,然后在主题中编写并调用自定义的标题函数。

步骤 1:移除默认的 title 标签输出

在主题的 functions.php 文件中添加以下代码,以解除 wp_head() 对标题标签的自动渲染:

// 删除 wp_head() 中的默认 title 标签输出
remove_action( 'wp_head', '_wp_render_title_tag', 1 );

步骤 2:创建并调用自定义标题函数

移除默认输出后,你需要在主题模板文件(通常是 header.php)中手动输出标题。你可以创建一个自定义函数来生成复杂的标题逻辑,然后在 <head> 区域调用它。

// 示例:一个简单的自定义标题函数
function my_custom_document_title() {
    $title = '';
    if ( is_home() || is_front_page() ) {
        $title = get_bloginfo( 'name' ) . ' - ' . get_bloginfo( 'description' );
    } elseif ( is_single() || is_page() ) {
        $title = get_the_title() . ' - ' . get_bloginfo( 'name' );
    } elseif ( is_category() ) {
        $title = single_cat_title( '', false ) . ' - 分类目录 - ' . get_bloginfo( 'name' );
    } else {
        $title = wp_title( '', false ) . ' - ' . get_bloginfo( 'name' );
    }
    echo '' . esc_html( $title ) . '';
}
// 在 header.php 的 <head> 部分调用此函数
// <?php my_custom_document_title(); ?>

优势: 此方法提供最高的灵活性,你可以完全控制标题的拼接规则、分隔符和所有页面的逻辑。

方法二:使用过滤器直接重写归档标题

如果你主要想修改分类、标签、作者等归档页面的标题格式,而不想完全接管所有页面的标题输出,可以使用 WordPress 提供的过滤器。这通常用于美化或简化归档页面的标题,但请注意,此方法通常不用于控制整个站点的 <title> 标签,它主要影响通过 the_archive_title() 等函数输出的标题。

以下示例演示如何重写归档标题的显示内容:

add_filter( 'get_the_archive_title', function ($title) {
    if ( is_category() ) {
        // 分类页面:只显示分类名称
        $title = single_cat_title( '', false );
    } elseif ( is_tag() ) {
        // 标签页面:只显示标签名称
        $title = single_tag_title( '', false );
    } elseif ( is_author() ) {
        // 作者页面:显示作者名称,可添加额外HTML
        $title = '' . get_the_author() . '';
    } elseif ( is_post_type_archive() ) {
        // 自定义文章类型归档页
        $title = post_type_archive_title( '', false );
    }
    // 返回修改后的标题
    return $title;
});

重要说明: 方法二中的 get_the_archive_title 过滤器主要用于修改在页面内容区显示的归档标题(如“分类:XXX”),它不会直接影响 <head> 中的 <title> 标签。要全局修改浏览器标签页和SEO中的标题,应使用方法一,或结合使用 document_title_parts 过滤器(这是更现代、更推荐的方法)。

推荐方法:使用 document_title_parts 过滤器(最佳实践)

对于 WordPress 4.4.0 及以上版本,最标准且非破坏性的自定义标题方法是使用 document_title_parts 过滤器。它允许你精细地修改标题的各个部分(如站点名称、页面标题、分隔符),而无需移除核心功能。

add_filter( 'document_title_parts', function( $title_parts ) {
    // 修改标题数组中的特定部分
    if ( is_singular() ) {
        // 为单篇文章/页面标题添加前缀
        $title_parts['title'] = '【精选】' . $title_parts['title'];
    }
    // 可以移除或修改站点名称部分
    // unset( $title_parts['site'] );
    // $title_parts['site'] = '我的网站';
    return $title_parts;
});

这种方法无需调用 remove_action,保持了与核心功能和插件的更好兼容性,是当前自定义 WordPress 页面标题的首选方案。

发表评论

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