原版wordpress在进入后台或者直接进入编辑页面时会载入非常缓慢,用chrome的开发者工具看network很容易发现是googleapis的jQuery-ui.css加载超时导致问题。国内对google的支持并不好,这点大家都知道。所以解决方案也很明确,就是替代出问题的

ajax.googleapis.com/ajax/libs/jqueryui/1.11.4
/themes/smoothness/jquery-ui.css

其中的1.11.4是版本号,以后可能会变。然后问题来了,翻遍wordpress都找不到上面那个地址。推测那个地址并不是直接饮用而是通过变量组成的,所以无法直接找到。不过在网上有另一个方案,修改wp-includes/functions.php。详细方法: https://www.cnblogs.com/ningmeng666/p/7324924.html

但我用起来存在问题,我先引用方法中的代码

function hc_cdn_callback($buffer) {returnstr_replace('ajax.googleapis.com/ajax/libs/jqueryui
/1.8.21/themes/smoothness/jquery-ui.css','cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.min.css', $buffer); } 
function hc_buffer_start() { ob_start("hc_cdn_callback"); } 
function izt_buffer_end() { ob_end_flush(); } 
add_action('init', 'hc_buffer_start'); 
add_action('shutdown', 'hc_buffer_end'); 

用起来直接报错,找不到 hc_buffer_end 函数。多明显啊,上面定义的叫 izt_buffer_end 。我不知道作者是故意的还是怎么,这么明显的问题就直接放出来了。不过作者接介绍方法结尾的地方说上面代码可能需要修改,后面我发现需要修改的不止一个函数名。izt_buffer_end 和 hc_buffer_end 修改哪个都行,函数名要一致。然后会继续报notice。

PHP Notice:  ob_end_flush(): failed to delete and flush buffer. No buffer to delete or flush in 

如果你能够修改php.ini,我建议你直接关了notice提示。如果不能,目前来说我能做到的唯一方式是,把 add_action(‘shutdown’, ‘hc_buffer_end’); 删了或者注释掉。

最后谈一下遗留问题。首先上述方法的大概逻辑是,既然找不到那个要修改的直接网址,就等php运行后在网址生成时,在php缓存中拦截并修改它,然后输出。ob_start是开启缓存进行修改,ob_end_flush冲出修改的缓存内容并关闭。我奇怪的是,就算我把ob_end_flush删了,上述方法也是有效的(不知道是不是大家都是这样的)。也就是说,其实并不需要ob_end_flush来冲出缓存。所以上面的方法其实可以缩减一下。

 function hc_cdn_callback($buffer) {
     return str_replace('ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/smoothness/jquery-ui.css', 'cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.min.css', $buffer);//主要是修改这行 
} 
function hc_buffer_start() { ob_start("hc_cdn_callback"); } 
add_action('init', 'hc_buffer_start'); 

 想说点什么吗?

 (拖动评论框右下角可扩展评论框面积;若评论发表后未显示请耐心等待审核)

弑神发表于2019.06.6th