最近公司的一个网上商店的项目,用的底层是wordpress+woocommerce,里面很多自定义的额外功能是由我开发的,最后部署的时候计划整合CDN,把静态内容都分流给边缘服务器,wordpress只处理数据逻辑,也就是只运行php程序。
这涉及到如何把默认的静态资源url替换成CDN的url,在网上翻了一遍,原来已经有大牛写出了靠谱的插件了,这个大牛的博客地址
https://dannyvankooten.com/using-a-cdn-with-wordpress/
人家在github上已经开源了自己的项目
https://github.com/dannyvankooten/wp-cdn-loader
直接下载插件到wp-content/plugins,解压,在管理页面激活就能使用
https://github.com/dannyvankooten/wp-cdn-loader/archive/master.zip
首先要在wp-config.php里面添加这么一行,可以作为是否开启CDN的开关之一,另外一个开关就是在后台
关闭这个插件的功能咯~
define( 'DVK_CDN_URL', 'http://xxxxxx.cloudfront.net' );
//The plugin won't replace assets when SCRIPT_DEBUG is enabled.
配置好之后,刷新页面,就能看到所有css,js,jpg,png的url的前面都被替换成了设置的值(
http://xxxxxx.cloudfront.net
)了,说明配置成功!
好奇心所向,研究了人家写的代码,一共2个文件,主文件
<?php
/*
Plugin Name: CDN Loader
Description: This plugin will load your assets from a given CDN instead of the local server.
Author: Danny van Kooten
Version: 1.0
Author URI: https://dannyvankooten.com/
*/
namespace CDN_Loader;
if( ! defined( 'ABSPATH' ) ) {
exit;
}
add_action( 'template_redirect', function() {
// Don't run if SCRIPT_DEBUG is set to true
if( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
return;
}
// load class
require_once __DIR__ . '/src/UrlRewriter.php';
// get url of cdn & site
$cdn_url = ( defined( 'DVK_CDN_URL' ) ? DVK_CDN_URL : '' );
$site_url = get_site_url();
// instantiate class
$url_rewriter = new UrlRewriter( $cdn_url, $site_url );
$url_rewriter->add_hooks();
});
class库文件
<?php
namespace CDN_Loader;
class UrlRewriter {
/**
* @var string
*/
private $cdn_url = '';
/**
* @var string
*/
private $site_url = '';
/**
* Constructor
*
* @param string $cdn_url
* @param string $site_url
*/
public function __construct( $cdn_url, $site_url ) {
// Store cdn url & site url in property
$this->site_url = $site_url;
$this->cdn_url = $cdn_url;
}
public function add_hooks() {
// add nothing if cdn url is empty
if( '' === $this->cdn_url ) {
return false;
}
// add rewrite filters for plugin & theme assets
add_filter( 'theme_root_uri', array( $this, 'rewrite' ), 99, 1 );
add_filter( 'plugins_url', array( $this, 'rewrite' ), 99, 1 );
// add rewrite filters for misc scripts and styles
add_filter( 'script_loader_src', array( $this, 'rewrite' ), 99, 1 );
add_filter( 'style_loader_src', array( $this, 'rewrite' ), 99, 1 );
return true;
}
/**
* @param $url
*
* @return mixed
*/
public function rewrite( $url ) {
$url = str_replace( $this->site_url, $this->cdn_url, $url );
return $url;
}
}
今天先写到这里,公司要上班了, 有空再补充说明。
转载于:https://blog.51cto.com/brucetam/1725648