回退Google CDN中的Java脚本

时间:2012-05-23 作者:LeMoussel

在里面HTML5 Boilerplate 它用这个JS代码抓取Google CDN的jQuery

<!-- Grab Google CDN\'s jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>window.jQuery || document.write(\'<script src="js/libs/jquery-1.7.1.min.js"><\\/script>\')</script>
我试图用PHP代码将其转换为WP

function sbi_cdn_jquery()
{
    global $wp_scripts;

    wp_deregister_script(\'jquery\');

    echo \'<script src="//ajax.googleapis.com/ajax/libs/jquery/\' . $wp_scripts->registered[\'jquery\']->ver . \'/jquery.min.js"></script>\';
    echo \'<script>window.jQuery || document.write(\\\'<script src="\' . get_bloginfo(\'wpurl\') . \'/wp-includes/js/jquery/jquery.js"<\\/script>\\\')</script>\';
}
add_action( \'wp_enqueue_scripts\', \'sbi_cdn_jquery\' );
但这行不通!

这是否可能在JavaScript中使用WP回退Google CDN?

谢谢你的帮助。

3 个回复
SO网友:Chip Bennett

脚本无法获取printedwp_enqueue_scripts 钩子,但在wp_print_scripts 钩也就是说:don\'t echo/print scripts, period. 相反enqueue 正确地使用它们。

Caveat: 此方法是插件领域,不应作为主题代码包含在公开发布的主题中。

您可以取消注册jQuery,但缺少的步骤是注册和排队您自己的版本:

<?php
function sbi_cdn_jquery() {
    // Deregister core-bundled jQuery
    // This is dangerous! Understand the
    // potential consequences before doing this!
    wp_deregister_script( \'jquery\' );

    // Register custom jQuery version
    wp_register_script( \'jquery\', \'//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js\' );

    // Enqueue cusotm jQuery
    wp_enqueue_script( \'jquery\' );
}
add_action( \'wp_enqueue_scripts\', \'sbi_cdn_jquery\' );
?>
有关详细信息,请参阅Codex条目wp_register_script()wp_enqueue_script() 关于这些函数的参数。

SO网友:nautilus7

我使用此函数注册主题使用的各种脚本并将其排队:

function cosmos_enqueue_scripts() {

// Load jquery from Google CDN (protocol relative) with local fallback when not available
if ( false === ( $url = get_transient(\'jquery_url\') ) ) {

    // Check if Google CDN is working
    $url = ( is_ssl() ? \'https:\' : \'http:\' ) . \'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\';
    $resp = wp_remote_head($url);

    // Load local jquery if Google down
    if ( is_wp_error($resp) || 200 != $resp[\'response\'][\'code\'] ) {

        $url = get_template_directory_uri() . \'/js/vendor/jquery-1.7.2.min.js\';
    }

    // Cache the result for 5 minutes to save bandwidth
    set_transient(\'jquery_url\', $url, 60*5);
}

// Deregister Wordpress\' jquery and register theme\'s copy in the footer
wp_deregister_script(\'jquery\');
wp_register_script(\'jquery\', $url, array(), null, true);

// Load other theme scripts here
wp_enqueue_script(\'modernizr\', get_template_directory_uri() . \'/js/vendor/modernizr-2.5.3.min.js\', array(        ), null, false);
wp_enqueue_script(\'bootstrap\', get_template_directory_uri() . \'/js/vendor/bootstrap.min.js\'      , array(\'jquery\'), null, true );
wp_enqueue_script(\'main\'     , get_template_directory_uri() . \'/js/main.js\'                      , array(\'jquery\'), null, true );
}
add_action(\'wp_enqueue_scripts\', \'cosmos_enqueue_scripts\');

SO网友:Zach

在上发布了相同的答案jquery stopped working after deregistering wordpress stock version, 但在此添加以供参考:

如果您一直在使用Google托管的jQuery版本,您会想到两个插件:

如果您对JavaScript调试不是百分之百满意(如果出现任何类似的情况),并且不能完全控制环境,那么最好只使用core。

结束

相关推荐

如何告诉WordPress页面上存在jQuery,以避免通过wp_enQueue_脚本重复

为了减少http请求,我将我的主题使用的所有脚本合并到一个简化的脚本中。每次保存主题选项时的js文件。此中的一个文件。js是jQuery库。我没有将jQuery作为一个单独的文件(使用wp\\u enqueue\\u脚本)包含,而是将wordpress核心jQuery文件作为此主机输出流的一部分。js文件问题是,由于我没有使用wp\\u enqueue\\u scripts()加载jQuery,因此有可能通过一个不知道它已经存在的插件在页面上包含多次。我可以设置一个标志以便WordPress知道页面上已经