3

我不确定这是否可行,但我希望我可以通过 PHP 以编程方式检索 WordPress 的内置 jQuery 版本号。

我更喜欢使用 jQuery 包含 CDN 版本wp_register_script(),然后我使用 WordPress 的内置 jQuery 作为后备。

使用 CDN 版本的问题在于,如果 WordPress 更新其内置的 jquery 版本,CDN 版本可能不匹配。所以我希望获取版本号(可能使用wp_default_scripts()),然后将其传递给wp_register_script().

关于我如何做到这一点的任何想法?

4

2 回答 2

9

我从WP jQuery Plus借来的:

function hs_script_enqueuer() {
    if( !is_admin() ) {

        // Enqueue so we can grab the built-in version
        wp_enqueue_script( 'jquery' );

        // Get jquery handle - WP 3.6 or newer changed the jQuery handle (once we're on 3.6+ we can remove this logic)
        $jquery_handle = (version_compare($wp_version, '3.6-alpha1', '>=') ) ? 'jquery-core' : 'jquery';

        // Get the WP built-in version
        $wp_jquery_ver = $GLOBALS['wp_scripts']->registered[$jquery_handle]->ver;

        // Just in case it doesn't work, add a fallback version
        $jquery_ver = ( $wp_jquery_ver == '' ) ? '1.8.3' : $wp_jquery_ver;

        // De-register built-in jquery
        wp_deregister_script('jquery');

        // Register CDN version
        wp_register_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/'. $jquery_ver .'/jquery.min.js' );

        // Enqueue new jquery
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'hs_script_enqueuer' );

// Add jquery fallback if CDN is unavailable
function jquery_fallback() {
    echo '<script>window.jQuery || document.write(\'<script src="' . includes_url( 'js/jquery/jquery.js' ) . '"><\/script>\')</script>' . "\n";
}
add_action( 'wp_head', 'jquery_fallback' );
于 2013-07-02T17:03:38.840 回答
0
if( ! function_exists('register_jquery_script') ){

    function register_jquery_script(){

        /* Get jquery handle - WP 3.6 or newer changed the jQuery handle (once we're on 3.6+ we can remove this logic) */
        $jquery_handle = (version_compare($wp_version, '3.6-alpha1', '>=') ) ? 'jquery-core' : 'jquery';

        /* Get the WP built-in version */
        $wp_jquery_ver = $GLOBALS['wp_scripts']->registered[$jquery_handle]->ver;

        /* Just in case it doesn't work, add a fallback version */
        $jquery_ver = ( $wp_jquery_ver == '' ) ? '1.8.3' : $wp_jquery_ver;

        /* the URL to check CDN accessibility */
        $url = 'http://ajax.googleapis.com/ajax/libs/jquery/' . $jquery_ver . '/jquery.min.js';

        /* test CDN accessibility */
        $test_url = wp_remote_fopen($url); 

        /* deregisters the default WordPress jQuery */
        wp_enqueue_script( 'jquery' );
        wp_deregister_script( 'jquery' ); 

        /* if CDN available - load it */
        if( $test_url !== false ) {
            wp_register_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/'. $jquery_ver .'/jquery.min.js', false , false , true );
        }

        /* if CDN unavailable - load local jquery copy */
        else{
            wp_register_script('jquery', get_template_directory_uri() . '/js/jquery.min.js', __FILE__, false, false, true);
        }

        wp_enqueue_script('jquery');

    }

    add_action('wp_enqueue_scripts','register_jquery_script');

}

您必须确保将本地 jquery 加载到名为jquery.min.js的template_directory/js/中

默认情况下,我在 wp_footer() 中加载所有脚本以提高页面加载性能。如果您在 wp_header() 中加载您的 js 脚本,您将在以下几行中将最后一个true更改为false

wp_register_script( 'jquery' , $src , false , false , false );

好好享受!

于 2013-12-09T00:13:01.430 回答