WordPress通过functions.php修改meta title样式

WordPress默认的标题是这样的:

  • 首页:副标题 | 博客名称
  • 其他:标题 | 博客名称

但是个人并不太喜欢这样的样式,想换成:

  • 首页:博客名称 – 副标题
  • 其他:标题 – 博客名称

也就是说,首页 title 的副标题和博客名称调换,而且所有 title 的分隔符都由竖线“|”改成减号“-”。

如果你的主题里面已经定义好了 <titile></title>标签,那就很好办,直接修改主题中的顶部文件 header.php 文件。但是我的主题没有自己做<title>,直接引用了 wp_head() ,所以无法修改 header.php 实现。

于是乎寻思着,functions.php 文件不是可以实现自定义的功能嘛?查询了很多博主的博客后,终于把问题解决了,只需在functions.php 加入如下代码:

function new_title($title) {
    if (is_front_page()) {
        $title = get_bloginfo('name') . ' - ' . get_bloginfo('description');
    } else {
        $title .= get_bloginfo('name');
    }

    return $title;
}
add_filter('wp_title', 'new_title');

代码很简单,不解释了。如果需要更加复杂的,比如分类后面加上“分类”关键词,标签后面加上“标签”关键词,可以用下面的过滤函数:

function new_title( $title, $sep, $seplocation ) {
    $paged = get_query_var('paged');
    $blog_name = get_bloginfo('name');
    $site_description = get_bloginfo('description');

    // 判断是否为首页
    if ($site_description && (is_front_page() || is_home())) {
        $title = "$blog_name $sep $site_description";
    } else {
        if (is_category()) {$type = ' 分类'; }
        elseif (is_tag()) { $type = ' 标签'; }
        elseif(is_author()) { $type = ' 的文章'; }
        elseif(is_date() || is_archive()) { $type = ' 存档'; }
        else $type = '';

        // 添加页码
        if ($paged > 1) {
            $page_num = ' 第' . $paged . '页';
        }

        // 清除空格和分隔符
        $title = trim( str_replace( $sep, '', $title ) );

        // 字符串转换成数组
        $parts = array( $title . $type . $page_num, $blog_name );

        // 分隔符位置
        if( $seplocation == 'left' ) {
            $parts = array_reverse( $parts );
        }

        // 清除空格、数组转换成字符串
        $parts = array_filter( $parts );
        $title = implode( ' ' . $sep . ' ', $parts );
    }

    // 返回 $title
    return $title;
}
add_filter( 'wp_title', 'new_title', 10, 3 );

 

发表评论