我正在尝试让Cloudflare的Rocket Loader在我的WP网站上运行。除了WP Visual Editor之外,一切正常。我按照这里的建议,但它不起作用:
如何在Wordpress中向javascript标签添加自定义属性?
Cloudflare说为了让Rocket Loader忽略javascript文件,我需要在我的脚本之前添加data-cfasync =“false”标记:
<script data-cfasync="false" src="/javascript.js"></script>
Rocket加载程序不会忽略我的JS文件。
这是我的代码:
function rocket_loader_attributes( $url )
{
$ignore = array (
'http://www.mysite.com/wp-includes/js/tinymce/tiny_mce.js?ver=349-21274',
'http://www.mysite.com/wp-admin/js/editor.js?ver=3.4.2'
);
if ( in_array( $url, $ignore ) )
{ // this will be ignored
return "$url' data-cfasync='false";
}
return $url;
}
add_filter( 'clean_url', 'rocket_loader_attributes', 11, 1 );
我的代码出了什么问题?
我目前正在自动模式下使用Rocket Loader。
有人可以帮忙吗?
也许你可以指出我正确的方向。
谢谢。
答案 0 :(得分:4)
我找到了解决方案!
正如本文所写: Controlling Cloudflare Rocket Loader
您的脚本几乎正确,但手动模式已损坏。您需要切换到自动模式,然后进行一些修改:
function rocket_loader_attributes_start() {
ob_start();
}
function rocket_loader_attributes_end() {
$script_out = ob_get_clean();
$script_out = str_replace(
"type='text/javascript' src='{rocket-ignore}",
'data-cfasync="false"'." src='",
$script_out);
print $script_out;
}
function rocket_loader_attributes_mark($url) {
// Set up which scripts/strings to ignore
$ignore = array (
'script1.js'
);
//matches only the script file name
preg_match('/(.*)\?/', $url, $_url);
if (isset($_url[1]) && substr($_url[1], -3)=='.js') {
foreach($ignore as $s) {
if (strpos($_url[1], $s)!==false)
return "{rocket-ignore}$url";
}
return "$url' data-cfasync='true";
}
return "$url";
}
if (!is_admin()) {
add_filter( 'clean_url', 'rocket_loader_attributes_mark', 11, 1);
add_action( 'wp_print_scripts', 'rocket_loader_attributes_start');
add_action( 'print_head_scripts', 'rocket_loader_attributes_end');
}
答案 1 :(得分:2)
请注意,示例中标记没有type='text/javascript'
属性。出于某种原因,Rocket Loader需要使用data-cfasync='false'
而没有type='text/javascript'
......一个错误?
您的代码确实添加了data-cfasync='false'
属性,但是也没有覆盖添加type='text/javascript'
属性的WordPress行为,这使得Rocket Loader不会“忽略”您的脚本。
覆盖此WordPress行为可能很棘手,因为relevant code不支持过滤器......
答案 2 :(得分:1)
Ernest Marcinko 的 solution 工作正常;然而,如今更简单(并且可能更安全)的解决方案是使用 WordPress 4.1 中添加的 script_loader_tag
钩子。
参见 this answer 示例。