Cloudflare's Rocket Loader + Wordpress -> Ignore scripts? Cloudflare's Rocket Loader + Wordpress -> Ignore scripts? wordpress wordpress

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.