之前,要在 Wordpress 中包含 jQuery,您必须这样做:
wp_enqueue_script('jquery');
但是,作为确保 jquery 尚未加载的一种方法,有些人会这样做:
function sp_load_jquery() {
// only use this method is we're not in wp-admin
if ( ! is_admin() ) {
// deregister the original version of jQuery
wp_deregister_script('jquery');
// register it again, this time with no file path
wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null);
// add it back into the queue
wp_enqueue_script('jquery');
}
}
add_action('template_redirect', 'sp_load_jquery');
许多人对此不以为然,他们认为 Wordpress 在 noConflict 模式下加载 jQuery。
但是,我的终极问题是,在 Wordpress 3.6+ 中,jQuery 似乎自动被 Wordpress 加入队列。有人可以告诉我是否是这种情况吗?
编辑
好的,所以有了下面的帮助和答案,这就是我现在所拥有的:
function sp_load_jquery() {
if ( ! is_admin() && !wp_script_is( 'jquery' ) ) {
wp_deregister_script('jquery');
wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js", false, null);
wp_enqueue_script('jquery');
}
}
add_action('wp_enqueue_scripts', 'sp_load_jquery');
add_action 在 Wordpress 触发 wp_enqueue_scripts 挂钩时加载 sp_load_jquery 函数。该函数然后检查用户是否没有查看管理员(因为 jQuery 是在那里自动加载的),并且还检查是否使用 Wordpresswp_script_js()
函数加载了 jQuery。然后该函数使用 Wordpress 取消注册 jQuery,使用 Google 的 CDN 重新注册它,然后将 Google 版本发送回队列。
但是,如果您不想使用 Google 的 CDN,只需这样做:
function sp_load_jquery() {
if ( ! is_admin() && !wp_script_is( 'jquery' ) ) {
wp_enqueue_script('jquery');
}
}
add_action('wp_enqueue_scripts', 'sp_load_jquery');