替换 WordPress 内置的谷歌字体

2014年8月26日 分类: Wordpress (996 个脚步)

2015年03月03日 更新: 目前 fonts.gstatic.com 和 fonts.googleapis.com 均已放开限制,已经解析到北京google的ip上,所以以下内容已经没用了

由于某些原因(你懂的),Google 旗下的所以网站都不能访问,即使能访问,访问的时间也很短。

然后问题就出现了,Wordpress 使用的是 fonts.googleapis.com 下的字体,导致访问后台非常慢。

解决问题的途径有两个:一是彻底禁用 WordPress 内置以及主题中引用的 Google Fonts;二是将 Google Fonts 用别的 CDN 上的文件替代。

第一种可以使用以下代码放在主题目录下的 functions.php 文件内。

//禁用google字体
class Disable_Google_Fonts {
    public function __construct() {
        add_filter( 'gettext_with_context', array( $this, 'disable_open_sans'), 888, 4 );
    }
    public function disable_open_sans( $translations, $text, $context, $domain ) {
        if ( 'Open Sans font: on or off' == $context && 'on' == $text ) {
            $translations = 'off';
        }
        return $translations;
    }
}
$disable_google_fonts = new Disable_Google_Fonts;

而第二种就也有选择:

1. 用 360 提供的 CDN

同样的也是编辑主题的 functions.php 文件,在末尾加入

function devework_replace_open_sans() {
 wp_deregister_style('open-sans');
 wp_register_style( 'open-sans', '//fonts.useso.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600' );
 wp_enqueue_style( 'open-sans');
}
//前台加载,看需要注释之;
add_action( 'wp_enqueue_scripts', 'devework_replace_open_sans' );
//后台加载,应该都需要的了
add_action('admin_enqueue_scripts', 'devework_replace_open_sans');

2. 自己反代google fonts

这个方法有限制,这个必须是要有国外的服务器或者连接google的服务器通畅。我使用的是nginx

首先要定义一个缓存池 

proxy_cache_path /var/tmp/one	levels=1:2 keys_zone=googlefonts:10m	max_size=2g;

server {
    listen 80;
    listen 443;
    server_name fonts.yoursite.com;
    
    ssl_prefer_server_ciphers On;
    ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers             HIGH:!aNULL:!MD5:!DSS:!RC4;
    ssl_certificate         /path/your/certificate/**.crt;
    ssl_certificate_key     /path/your/certificate/**.key;
    ssl_session_timeout     5m;
    keepalive_timeout       70;
    
    location / {
        proxy_cache googlefonts;
        proxy_cache_valid 200 302 1h;
        proxy_cache_valid 404 1m;
        
        proxy_pass https://fonts.googleapis.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        sub_filter fonts.googleapis.com fonts.yoursite.com;
        sub_filter_once off;
    }
}

这一段因为我 HTTP 和 HTTPS 都是用同样的代码,就可以这样合并在一起。不相同就要将他们分开。

如果你没有 HTTPS,你可以将这里面的关于 HTTPS 的东西移除掉就好了。

接下来也是修改主题目录下的 functions.php 文件,在最后面添加

function devework_replace_open_sans() {
 wp_deregister_style('open-sans');
 wp_register_style( 'open-sans', '//fonts.yoursite.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600' );
 wp_enqueue_style( 'open-sans');
}
//前台加载,看需要注释之;
add_action( 'wp_enqueue_scripts', 'devework_replace_open_sans' );
//后台加载,应该都需要的了
add_action('admin_enqueue_scripts', 'devework_replace_open_sans');

完成。

替换 WordPress 内置的谷歌字体 【声明】本文 替换 WordPress 内置的谷歌字体 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2014/08/replace-google-fonts-address-in-wordpress/ , 转载请保留本声明!

标签: , , , ,
2 条评论
  • Google Fonts 的字体是存在 fonts.gstatic.com 里的,所以你要把它也反代了才行。

    • 本来是想反代的,不过好像能顺利打开 fonts.gstatic.com 我就没继续把他也反代了

你必须要启用 Javascript