wordpress 加速主題的靜態資源

tty521發表於2017-05-22
wordpress 加速主題的靜態資源(固定的CSS、JS和圖片等)

wordpress 中用函式 get_stylesheet_directory_uri() 生成當前主題的 URL , 格式如 http://host/path/wp-content/themes/twentyseventeen

當前主題的靜態的CSS、JS和圖片等一般由當前主題指定相對路徑, 一個完整的靜態檔案的 URL 是 get_stylesheet_directory_uri() + 這個相對路徑

如果 wordpress 被假設在國外的伺服器上,在國內訪問還是比較慢的,如果能把這些靜態檔案放在國內的伺服器上,網站速度就會有所提升。改變 get_stylesheet_directory_uri() 就可以實現這個目的。

這個函式在 wp-includes/theme.php 檔案的 194 行左右,wordpress4.7

這是一個比較笨的辦法,這樣當從中國瀏覽 wordpress 時,靜態檔案從又拍雲上加速,當從國外瀏覽時從原站載入靜態檔案

1. 替換該函式的 return 並加入下行

	$ip_china = '/china-ip.json';
	$cdn_china = '//yisuo.b0.upaiyun.com/wp-content/themes/';
	$ip_remote = $_SERVER["REMOTE_ADDR"]; 
	$path_themes = apply_filters( 'stylesheet_directory_uri', $stylesheet_dir_uri, $stylesheet, $theme_root_uri );
	if(check_is_china_ip($ip_remote, $ip_china)) $path_themes = $cdn_china . $stylesheet;

	/**
	 * Filters the stylesheet directory URI.
	 *
	 * @since 1.5.0
	 *
	 * @param string $stylesheet_dir_uri Stylesheet directory URI.
	 * @param string $stylesheet         Name of the activated theme's directory.
	 * @param string $theme_root_uri     Themes root URI.
	 */
	return $path_themes;
	


    

2. 在 wp-includes/theme.php 檔案的最後一行加入這個函式
    
	
# ****** 從json格式資料中檢測IP是否來自中國
function check_is_china_ip($ip, $ipjson){
    $ip_addr = explode('.', $ip);
    if(count($ip_addr) < 4) return false;
    $a1 = (int)$ip_addr[0];
    $a2 = (int)$ip_addr[1];
    $a3 = (int)$ip_addr[2];
    $a4 = (int)$ip_addr[3];
    $s_china = file_get_contents($ipjson);
    $tb_china = json_decode($s_china, 1);
    unset($s_china);
    if(!isset($tb_china[$a1][$a2]) || count($tb_china[$a1][$a2]) == 0) return false;
    $a = $a3 * 256 + $a4;
    foreach($tb_china[$a1][$a2] as $d){
        if($a >= $d['s'] && $a <= $d['e']){
            return true;
        }
    }
    return false;
}



3. 檔案修改完畢,相關的 IP 庫放在網站的根目錄下,解壓後檔案不到 400 KB

	http://pan.baidu.com/s/1gfcfn95




相關文章