2

我正在尝试让 Cloudflare 的 Rocket Loader 在我的 WP 网站上运行。除了 WP 可视化编辑器外,一切正常。我遵循了这里的建议,但它不起作用:

如何在 Wordpress 中向 javascript 标签添加自定义属性?

Cloudflare 说,为了让 Rocket Loader 忽略 javascript 文件,我需要在脚本之前添加 data-cfasync="false" 标记:

<script data-cfasync="false" src="/javascript.js"></script>    

https://support.cloudflare.com/entries/22063443--How-can-I-have-Rocket-Loader-ignore-my-script-s-in-Automatic-Mode-

Rocket loader 不会忽略我的 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。

任何人都可以帮忙吗?

也许你可以指出我正确的方向。

谢谢你。

4

3 回答 3

4

我已经找到了解决方案!

正如本文所述: 控制 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');
}
于 2014-03-25T13:42:12.917 回答
2

请注意,该示例中的标签没有该type='text/javascript'属性。出于某种原因,Rocket Loader 需要data-cfasync='false'在没有type='text/javascript'...错误的情况下使用?

您的代码确实添加了该data-cfasync='false'属性,但也没有覆盖 WordPress 添加该type='text/javascript'属性的行为,这使得 Rocket Loader 不会“忽略”您的脚本。

由于相关代码不支持过滤器,因此覆盖此 WordPress 行为可能会很棘手......

于 2013-03-27T20:55:22.523 回答
1

Ernest Marcinko 的解决方案运行良好;然而,如今更简单(并且可能更安全)的解决方案是使用在WordPress 4.1script_loader_tag中添加的钩子。

有关示例,请参见此答案。

于 2021-04-26T02:48:34.757 回答