WP脚本版本控制打破了跨站点缓存?

时间:2011-01-26 作者:Eoin Kelly

我使用以下代码从google CDN加载JQuery:

wp_deregister_script(\'jquery\'); 
 wp_register_script(
    \'jquery\', // handle - WP uses this name to refer to script
    \'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js\',
     array(), // Array of handles representing scripts that this one depends on.
     false, // Version number - defaults to false.
     false // false = put script in header, true = put in footer
 );
wp_enqueue_script(\'jquery\');
在firebug中,我看到wordpress附加了“?ver=3.0.4\'到URL以控制缓存。事实上,似乎没有任何方法可以阻止WP追加something 到URL-我可以在调用wp\\u register\\u script()时提供自己的字符串,但如果我将其留空(或“false”),wp将使用默认的“ver=3.0.4”)

我相信附加的版本字符串会阻止用户的浏览器重新使用可能从different 网站E、 g。

用户访问www.example。com加载ajax。古格里皮斯。com/ajax/libs/jquery/1.4.4/jquery。因此它现在位于浏览器缓存中既然跨站点缓存是我想使用谷歌CDN的主要原因之一,那么除了手动加载脚本(不理想)或破解WP core之外,还有其他解决方案吗?

TIA公司

/Eoin/

5 个回复
最合适的回答,由SO网友:lemats 整理而成

将null用作$ver参数:

wp_deregister_script( \'jquery\' );
wp_register_script( \'jquery\', \'https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js\', false, null);
wp_enqueue_script(\'jquery\');
输出:

<script type=\'text/javascript\' src=\'https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js\'></script>

SO网友:Rarst

我删除了这样的版本,可以轻松写出以匹配多个域:

add_filter( \'script_loader_src\', \'jquery_unversion\' );

function jquery_unversion( $src ) {

    if( strpos( $src, \'ajax.googleapis.com\' ) )
        $src = remove_query_arg( \'ver\', $src );

    return $src;
}

SO网友:Peter Rowell

简短回答:没有。

我查看了wp-includes/scriptloader.php 没有任何东西表明提供版本号的“选项”。

但是,您可以简单地将其作为显式的<script> 标签当然,这完全违背了wp_register_script(), 但WP中的许多“特性”也是如此。(不要让我开始用regexp对短代码进行脑死亡/中断解析。)

SO网友:Eoin Kelly

感谢大家的回复。最后,这是我使用的代码(为了将来的搜索者,在这里发布):

function control_wp_url_versioning($src)
{
    // $src is the URL that WP has generated for the script or stlye you added 
    // with wp_enqueue_script() or wp_enqueue_style(). This function currently 
    // removes the version string off *all* scripts. If you need to do something 
    // different, then you should do it here.
    $src = remove_query_arg( \'ver\', $src );
    return $src;
}

// The default script priority is 10. We load these filters with priority 15 to 
// ensure they are run *after* all the default filters have run. 
add_filter(\'script_loader_src\', \'control_wp_url_versioning\', 15); 
add_filter(\'style_loader_src\', \'control_wp_url_versioning\', 15); 

SO网友:Otto

包括来自Google CDN的jQuery还需要一些额外的代码来处理noConflict模式问题。

我建议不要自己滚动,而是使用一个设计好的插件来正确处理它。这个很好用:http://wordpress.org/extend/plugins/use-google-libraries/

简单无障碍设置。只要激活它,它就会用谷歌的CDN版本替换所有相关的库。

结束