WordPress 博客程序默认静态资源全部存放在 wp-content、wp-includes 目录下,包括主题样式和各种插件样式。
使用七牛CDN对博客静态资源进行加速步骤:
第一步、同步所有静态资源到七牛空间
第二步、替换静态资源域名
if (!is_admin()) { function qiniu_ob_start() { ob_start('qiniu_cdn_replace'); } function qiniu_cdn_replace($html) { if ($_SERVER['SERVER_PORT'] == '443' || $_SERVER['HTTPS'] == 'on') return str_replace('blog.zhengxianjun.com/wp-content', 'dn-zhengxianjun.qbox.me/wp-content', str_replace('blog.zhengxianjun.com/wp-includes', 'dn-zhengxianjun.qbox.me/wp-includes', $html)); return str_replace('blog.zhengxianjun.com/wp-content', 'zhengxianjun.qiniudn.com/wp-content', str_replace('blog.zhengxianjun.com/wp-includes', 'zhengxianjun.qiniudn.com/wp-includes', $html)); } add_action('wp_loaded', 'qiniu_ob_start'); }
上述代码需要添加到 wp-content/themes/twentyfifteen/functions.php。其中,twentyfifteen 是当前博客使用的主题。
实现效果
访问博客首页
查看网络资源
可以看到博客已经使用了CDN对静态资源加速。
以后每次更新静态资源时需要同时更新到七牛空间。
为了简化静态资源同步,使用脚本 wp-static-sync.php 同步静态资源到本地七牛空间目录,七牛的 QRSBox 会自动更新目录下的所有文件。
<?php // 文件 wp-static-sync.php if (!isset($_SERVER['argv'])) { return; } function copy_static($static_source, $static_target) { if (!is_dir($static_source)) { echo "static_source : <$static_source> is not a dir\n"; return false; } if (!is_dir($static_target)) { if (false === mkdir($static_target)) { echo "mkdir ERROR target <$static_target>\n"; return false; } else { echo "mkdir Ok target <$static_target>\n"; } } $handler_source = opendir($static_source); $handler_target = opendir($static_target); $reg_static = '/\.css$|\.js$|\.gif$|\.jpg$|\.png$/i'; while ($name = readdir($handler_source)) { if ($name == '.' || $name == '..') continue; $file_source = $static_source . '/' . $name; if (is_file($file_source)) { if (preg_match($reg_static, $name)) { $file_target = $static_target . '/' . $name; if (false === copy($file_source, $file_target)) { echo "copy ERROR <$file_source> to <$file_target>\n"; } else { echo "copy Ok <$file_source> to <$file_target>\n"; } } } else if (is_dir($file_source)) { $file_target = $static_target . '/' . $name; if (false === copy_static($file_source, $file_target)) { return false; } // 删除空目录 if (count(scandir($file_target)) == 2) { if (false === rmdir($file_target)) { echo "rmdir ERROR empty <$file_target>\n"; } else { echo "rmdir Ok empty <$file_target>\n"; } } } } } $static_source = 'D:\work\blog'; $static_target = 'D:\work\zhengxianjun_cdn\www\static'; copy_static($static_source . '/wp-content', $static_target . '/wp-content'); copy_static($static_source . '/wp-includes', $static_target . '/wp-includes');
至此,虽然流程上略长,但基本实现了想要的功能。
另一种方法,是使用 wpjam-qiniu 这款插件,该插件可以绑定到七牛空间。因为我在使用过程中出现了一些问题,之前发布的文章中图片地址出现了错误,所以使用上面所述的方法实现。