W3 总缓存插件 cdn url 不适用于 woo 主题

W3 total cache plugin cdn url not working with woo theme

我目前正在尝试让 W3 Total Cache 在 wordpress 网站上运行,并注意到发送 CDN url 请求时出现了一些相当奇怪的行为。

我正在使用云端 cdn 并将其指向指向云端的 CNAME (cdn.test.com) url。

现在,所有不属于主题的图像 css 和 javascript 都可以使用 CDN CNAME url 正确呈现。

example: http://cdn.test.com/wp-content/2015/01/image-150X150.jpg
http://cdn.test.com/wp-includes/base/css/style.css
http://cdn.tes.com/wp-includes/base/js/home.js

(我还可以补充一点,这也发生在云端 url 上。) 但是当涉及到作为 woo 主题的一部分的 css 和 javascript 时,它呈现如下。

http://cdn.test.com/http://example.com/wp-content/themes/test-theme/js/theme.js
http://cdn.test.com/http://example.com/wp-content/themes/test-theme/css/theme.css

我已经与主题开发人员和其他相关人员讨论过这个问题,但他们的意见很少。

我查看了各种选项,例如使用 preg_replace 来匹配奇怪的 url 的出现并将其替换为空字符串。

但是这没有用,因为我可能 using/calling 参考文档 https://support.woothemes.com/hc/en-us/articles/203106877-Canvas-Hook-Filter-Reference 和 wordpress 的 add_action 或 add_filter 错误(我的意思是 wp_head 或 wp_footer).

您可能已经发现我没有使用 wordpress 的经验,请您帮助解释这是怎么回事或出了什么问题,以及我可以解决这个问题的可能方法。

感谢您的帮助。

最后,用这段代码跟踪并修复了这个问题:

add_filter('w3tc_cdn_url', 'fix_host_in_cdn_url',10,3);
function fix_host_in_cdn_url($content) {
  $content = preg_replace("/(\/http?:\/\/[\da-z\.-])/", '', $content);
  return $content;
}