写在前面:本文只限于国内网络环境用户参考,有梯子的不用看,需要使用GoogleAPIs、Facebook SDk、Twitter Platform的不用看

老派

WordPress主题由于时常使用Google的各种APIs(Fonts字体或Map地图),国内访问时,这些引用严重拖慢了访问速度,这是一个老生常谈的问题。

字体的问题可以通过修改代码或安装插件,去除google fonts或者转为国内的镜像源访问,这很容易做到。Google Map引用一般可以通过后台设置关闭来避免加载。

但是,在某些高级主题中,完全去除外部引用似乎有些困难。我目前用的是ThemeForest 销量第一的AVADA主题,这个主提在后台是可以完全关掉Google Fonts和Google Map。但是,无论如何设置,在页面的Live编辑模式下,总是会有几个外部引用严重拖慢访问速度,粗略估计至少延迟了30几秒,这对于经常用Live模式编辑页面的用户来说非常不友好。控制台截图如下:

AVADA主题Live模式由于网络问题引起的外部引用错误

粗略看一下这几条报错的地址,就应该大概知道问题所在了,国内几大404网站在此,不慢才怪。这些加载项通过后台设置是无法去除的,即使关掉所有相关的Facebook、Google、Twitter选项都不行。在AVADA中,FaceBook和Twitter是可以通过关闭Widget来避免加载,但是很不幸,我需要用到Widget。


解决办法其实不难,之前AChair.cn还因为这个问题在教程视频里专门补充了相关内容(好像是针对NewPaper主题),用到的方法是直接替换主题或插件里面的相关地址代码,替换成本地文件或去除。不过这个方法有个缺点就是主题升级以后会覆盖文件,需要重新编辑。

非学·派这里有一个稍微好一些的方法——利用Child Theme子主题功能【WP官方非常推荐的一种主题使用方法,AVADA也自带】,在functions.php文件中加入代码,实现功能,且不影响主题升级。我把我的代码放在下面供参考,每个主题不一样,可能方法不尽相同,但是原理一样。【此操作建议有一定编程基础的用户使用,否则易造成不可挽回的损失,请注意!】

在子主题functions.php中加入如下代码:

// 功能:删除Avada主题Live编辑模式的外部资源加载;
// Link: https://fxpai.com/remove-avada-live-google-facebook-twitter/
// ***注意:使用时请删除“去掉这几个汉字”***

function fxpai_remove_googleapis() {
	wp_deregister_script( 'google-maps-api' );
	wp_deregister_script( 'google-maps-infobox' );
}
add_action( 'wp_enqueue_scripts', 'fxpai_remove_googleapis', 20 );

function fxpai_html_filter($html){
	$str_live = strpos($html, 'class="去掉这几个汉字fusion-builder-live');
	if($str_live > 0){
		$html = str_replace('https://connect.facebook.net/zh_CN/sdk.js#xfbml=1&version=v2.11&appId=', '', $html);
		$html = str_replace('//platform.twitter.com/widgets.js', '', $html);
	}
	return $html;
}

function fxpai_html_filter_begin(){
	ob_start('fxpai_html_filter');
}

function fxpai_html_filter_end(){
	ob_end_flush();
}

add_action('wp_loaded', 'fxpai_html_filter_begin');
add_action('shutdown', 'fxpai_html_filter_end');

完成后刷新页面,之前的报错全部消失了,Live编辑页面加载速度飞速上升。如下图:

正常加载无报错

这个方法不是最好的方法,其实可以编写成插件直接安装激活就行。工作量在于分析不同主题的代码,需要耗费挺多时间的,如果只针对AVADA主题,我上面的代码足够了。希望有时间的小同学们能够把这个插件写出来,造福国内主题用户。谢谢。