WordPress非插件纯代码实现静态资源CDN加速功能(又拍云、七牛)

[ wordpress教程   // 2015-04-07  ]
244

七牛云存储(又拍云存储)是一个静态文件CDN加速服务,七牛存储分布全国的 CDN 加速网络,采用电信、联通、移动、教育网四线带宽,不限制带宽峰值,并通过高速缓存、智能解析、负载均衡技术,为用户计算最快访问机房,与传统的IDC相比,图片打开速度提升60%-300%。

既然我们用上了七牛的源站加速这一功能,不如将wordpress七牛镜像存储插件,WP SUPER CACHE等里面的CDN功能,都用代码方式实现。

wordpress免插件纯代码实现又拍云、七牛CDN加速:

七牛设置CDN:

WordPress七牛云存储设置

又拍云设置CDN:

又拍云CDN设置

在七牛或者又拍云设置好CDN后,将下面代码仍入主题的functions.php函数文件中即可。

将本地图片地址替换为CDN地址:

添加至主题目录functions.php中:

define('CDN_HOST','http://cdn.wugongqi.cn');

add_filter('the_content','z_cdn_content');

function z_cdn_content($content){

return str_replace(home_url().'/wp-content/uploads', CDN_HOST.'/wp-content/uploads', $content);

}

add_filter('wp_get_attachment_url','z_get_attachment_url',10,2);

function z_get_attachment_url($url, $post_id){

return str_replace(home_url(), CDN_HOST, $url);

}

注意 define('CDN_HOST','http://cdn.wugongqi.cn'); 需要替换为你自己的CDN地址。

将主题静态资源地址替换为CDN地址

添加至主题目录functions.php中:

add_filter('stylesheet_directory_uri','z_cdn_stylesheet_directory_uri',10,3);

function z_cdn_stylesheet_directory_uri($stylesheet_dir_uri, $stylesheet, $theme_root_uri) {

return str_replace(home_url(), CDN_HOST, $stylesheet_dir_uri);

}

add_filter('template_directory_uri','z_cdn_template_directory_uri',10,3);

function z_cdn_template_directory_uri($template_dir_uri, $template, $theme_root_uri)

{

return str_replace(home_url(), CDN_HOST, $template_dir_uri);

}

将 wp-content / wp-includes 静态资源替换为CDN地址:

define('FocusCDNHost','http://www.softhome.cc');//wordpress网站网址
define('FocusCDNRemote','http://cdn.wugongqi.cn');//cdn域名
define('FocusCDNIncludes','wp-content,wp-includes');//设置加速目录
define('FocusCDNExcludes','.php|.xml|.html|.po|.mo');//设置文件白名单
define('FocusCDNRelative','');//Check this if you want to have links like <wp-content/abc.png> rewritten - i.e. without your blog's domain as prefix.

function do_cdnrewrite_ob_start() {
$rewriter = new FocusCDNRewriteWordpress();
$rewriter->register_as_output_buffer();
}
add_action('template_redirect', 'do_cdnrewrite_ob_start');

class FocusCDNRewriteWordpress extends FocusCDNRewrite
{
function __construct() {
$excl_tmp = FocusCDNExcludes;
$excludes = array_map('trim', explode('|', $excl_tmp));

parent::__construct(
FocusCDNHost,
FocusCDNRemote,
FocusCDNIncludes,
$excludes,
!!FocusCDNRelative
);
}
public function register_as_output_buffer() {
if ($this->blog_url != FocusCDNRemote) {
ob_start(array(&$this, 'rewrite'));
}
}

}

class FocusCDNRewrite {
var $blog_url    = null;
var $cdn_url     = null;
var $include_dirs   = null;
var $excludes    = array();
var $rootrelative   = false;

function __construct($blog_url, $cdn_url, $include_dirs, array $excludes, $root_relative) {
$this->blog_url   = $blog_url;
$this->cdn_url    = $cdn_url;
$this->include_dirs  = $include_dirs;
$this->excludes   = $excludes;
$this->rootrelative  = $root_relative;
}

protected function exclude_single(&$match) {
foreach ($this->excludes as $badword) {
if (stristr($match, $badword) != false) {
return true;
}
}
return false;
}

protected function rewrite_single(&$match) {
if ($this->exclude_single($match[0])) {
return $match[0];
} else {
if (!$this->rootrelative || strstr($match[0], $this->blog_url)) {
return str_replace($this->blog_url, $this->cdn_url, $match[0]);
} else {
return $this->cdn_url . $match[0];
}
}
}

protected function include_dirs_to_pattern() {
$input = explode(',', $this->include_dirs);
if ($this->include_dirs == '' || count($input) < 1) {
return 'wp/-content|wp/-includes';
} else {
return implode('|', array_map('quotemeta', array_map('trim', $input)));
}
}

public function rewrite(&$content) {
$dirs = $this->include_dirs_to_pattern();
$regex = '#(?<=[(/"/'])';
$regex .= $this->rootrelative
? ('(?:'.quotemeta($this->blog_url).')?')
: quotemeta($this->blog_url);
$regex .= '/(?:((?:'.$dirs.')[^/"/')]+)|([^//"/']+/.[^//"/')]+))(?=[/"/')])#';
return preg_replace_callback($regex, array(&$this, 'rewrite_single'), $content);
}

}

如果您并没有使用前面的“将本地图片地址替换为CDN地址”代码,还需补充一条:

define('CDN_HOST','http://cdn.wugongqi.cn');