与 WordPress 网站 Title 中横线的战争

每次模板升级或者换模板 Title 这块一直是个大问题。default 的模板总是不称心意。经过 Forece 一番苦斗终于解决了所有问题。

1. 首先是 |
很不喜欢竖线 | 分隔符,这个问题很好解决,基本上就直接去 header.php 里边把分隔符给换成 - 就可以了。

在 header.php 中找到代码

1
<title><?php wp_title(' | ','true','right'); ?><?php bloginfo('name'); ?></title>

然后替换成

1
<title><?php wp_title(' - ','true','right'); ?><?php bloginfo('name'); ?></title>

2. 横线 - 被转义
然后发现虽然显示了横线 - ,但是在源码中却被转义成了 – 而且还被拉长了,半角小横线 - 变成了全角大横线-。这个问题也在网上找到了解决方案,一个是直接修改 wp_title 的 wordpress 内部函数,不过代码复杂,这个方案直接被忽略了,如果有兴趣的可以看下这里,Forece 用的方法比较简单,直接放弃 wp_title 函数带的分隔符,然后直接用 echo 显示横线。

打开 header.php

1
<title><?php wp_title(' - ','true','right'); ?><?php bloginfo('name'); ?></title>

修改为

1
<title><?php echo trim(wp_title('', false, 'right')); ?><?php echo ' - '; ?><?php bloginfo('name'); ?></title>

然后你就发现,虽然大横线被替换了成了小横线,但是主页的 title 却显示成了 "- Forece" 前边多了个横线。我就日了。还得在主页上加个判断。

1
2
3
4
5
<?php if (is_home()): ?>
<title><?php bloginfo('name'); ?></title>
<?php else: ?>
<title><?php echo trim(wp_title('', false, 'right')); ?><?php echo ' - '; ?><?php bloginfo('name'); ?></title>
<?php endif; ?>

改到最后,发现标题后边还带小横线,显示为首页显示为 "Forece -" ,然后文章页显示为 "标题 - Forece Blog - " 为了解决这个问题,都快给我整疯了。最后终于发现了罪魁祸首 function.php ,原来主题里边给自定义了 title 显示方式。去到 function.php 里边,把关于 title 的代码注释掉。记录一下子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 主页 Title 注释开始
add_theme_support( "title-tag" );
if(!function_exists('asw_wp_title')) {
    function asw_wp_title($title, $sep) {
        $id = get_the_ID();
        $title_prefix = esc_attr(get_bloginfo('name'));
        $title_suffix = '';
        $unchanged_title = $title;
        $title = is_front_page() ? $title_prefix.' - '.esc_attr(get_bloginfo('description')) : $title.$title_prefix.' - '.esc_attr(get_bloginfo('description'));
        return $title;
    }
    add_filter('wp_title', 'asw_wp_title', 10, 2);
}
主页 Title 注释结束 */

世界清净了!!

这里稍微说明一下 wp_title 函数和 bloginfo 函数

wp_title 函数在 WordPress 中是用来显示文章、页面、分类等等等等标题的一个函数,但在首页索引,该函数将不显示任何的东西。

比如如果你把你的 title 代码写成这样:

1
<title><?php wp_title(' | ','true','right'); ?></title>

在主页的 Title 中并不显示任何东西,文章页只显示标题并且加个分隔符,如 "标题 -"

用法:

1
<?php wp_title( $sep, $echo, $seplocation ); ?>

参数:

1
2
3
$sep:分隔符;
$echo:是否显示;
$seplocation:分隔符所在位置(左还是右,只接受'right',如果不是right自动判定为左)

bloginfo 参数其实是显示博客的各种信息了。

显示博客标题

1
<?php bloginfo('name'); ?>

显示博客描述(副标题)

1
<?php bloginfo('description'); ?>

更多用法请参考 WordPress 说明文档
https://codex.wordpress.org/zh-cn:%E6%A8%A1%E6%9D%BF%E6%A0%87%E7%AD%BE/bloginfo