Cloudflare's Rocket Loader + Wordpress -> Ignore scripts?
I have found the solution for this!
As it's written in this article:Controlling Cloudflare Rocket Loader
Your script was almost right, but the manual mode is broken. You need to switch to automatic mode, and then make some modifications:
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');}
Notice in the example that the tag does not have the type='text/javascript'
attribute. For some reason Rocket Loader requires data-cfasync='false'
to be used without the type='text/javascript'
... a bug?
Your code does add the data-cfasync='false'
attribute, but does not override the WordPress behaviour of adding the type='text/javascript'
attribute also, which makes Rocket Loader not to "ignore" your script.
It might be tricky to override this WordPress behaviour since the relevant code does not support a filter...
Ernest Marcinko's solution works fine; however a simpler (and potentially safer) solution these days is to use the script_loader_tag
hook, added in WordPress 4.1.
See this answer for an example.