替换 WordPress 内置的谷歌字体
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 内置的谷歌字体 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2014/08/replace-google-fonts-address-in-wordpress/ , 转载请保留本声明!
Google Fonts 的字体是存在 fonts.gstatic.com 里的,所以你要把它也反代了才行。