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 这款插件,该插件可以绑定到七牛空间。因为我在使用过程中出现了一些问题,之前发布的文章中图片地址出现了错误,所以使用上面所述的方法实现。