本文我们来分享一个 WordPress 非插件纯代码实现的静态资源CDN加速的功能,文章后面我们再将告诉你如何在又拍云、七牛CDN加速配置.
先我们看看实现CDN加速功能的步骤,将本地图片地址替换为CDN地址,添加至主题目录functions.php中:
- define('CDN_HOST','http://cdn.mywpku.com');
- 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.mywpku.com'); 需要替换为你自己的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地址.
- @Via:http://www.Vevb.com/jianzhan/2282.html
- define('FocusCDNHost','http://ehsren.com');//wordpress网站网址
- define('FocusCDNRemote','http://cdn.ehsren.com');//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);
- }
- }
wordpress免插件纯代码实现又拍云、七牛CDN加速
wordpress七牛镜像存储插件,WP SUPER CACHE等里面的CDN功能,都可以用代码方式实现,在七牛或者又拍云设置好CDN后,将下面代码仍入主题的functions.php函数文件中即可.
新闻热点
疑难解答
图片精选