可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
My wordpress site is a bit heavy to download. On the frontend, its including jquery unnecessarily. In my firebug it looks like:
jquery.js?ver=1.3.2
and
jquery.form.js?ver=2.02m
I don't need these to be included for me.
I'm happy for them to remain in the wp-admin, but I'd like them not to load on the frontend.
I have found the file I think which is loading them in wp-includes/script-loader.php
but I'm not sure what to uncomment out or what to do to remove it completely for the front.
Is there a way to do this, removing jquery without ruining the back end?
回答1:
JQuery may be being added by your theme. If your theme is adding it properly, it should be using the wp_enqueue_script()
function. To remove JQuery, simply use the wp_deregister_script()
function.
wp_deregister_script('jquery');
Removing JQuery for your whole site might cause some unintended consequences for your admin section. To avoid removing JQuery on your admin pages, use this code instead:
if ( !is_admin() ) wp_deregister_script('jquery');
Now only pages that are not admin pages will run the wp_deregister_script()
function.
Add this code to the functions.php file in your theme directory.
回答2:
All the other solutions are now out of date as of wordpress 3.6
add_filter( 'wp_default_scripts', 'change_default_jquery' );
function change_default_jquery( &$scripts){
if(!is_admin()){
$scripts->remove( 'jquery');
$scripts->add( 'jquery', false, array( 'jquery-core' ), '1.10.2' );
}
}
回答3:
The correct method to completely remove a style or script is to dequeue it and deregister it. You should also note that front end scripts are handled through the wp_enqueue_scripts
hook while back end scripts are handled through the admin_enqueue_scripts
hook.
So with that in mind, you can do the following
add_filter( 'wp_enqueue_scripts', 'change_default_jquery', PHP_INT_MAX );
function change_default_jquery( ){
wp_dequeue_script( 'jquery');
wp_deregister_script( 'jquery');
}
EDIT 1
This has been fully tested on Wordpress version 4.0 and working as expected.
EDIT 2
As proof of concept, paste the following code in your functions.php. This will print a success or failure message in the head of your site, back end and front end
add_action( 'wp_head', 'check_jquery' );
add_action( 'admin_head', 'check_jquery' );
function check_jquery() {
global $wp_scripts;
foreach ( $wp_scripts->registered as $wp_script ) {
$handles[] = $wp_script->handle;
}
if( in_array( 'jquery', $handles ) ) {
echo 'jquery has been loaded';
}else{
echo 'jquery has been removed';
}
}
回答4:
Wordpress adds this jQuery call via a template tag named <?php wp_head(); ?>
, which appears in most themes, and is necessary for some plugins to work.
It could be annoying, not only because of loading, but because it might kill previously loaded jQuery, and might even get in the way of some plugins who try to load jQuery as well.
The quick fix is openning up the file header.php in your theme's directory, and adding:
<?php wp_deregister_script('jquery'); ?>
right before
<?php wp_head(); ?>
Or just combine them both into:
<?php wp_deregister_script('jquery'); wp_head(); ?>
A more technical explanation could be found here
回答5:
Look into your theme files.
wp-content/themes/header.php
may include the .js files.
回答6:
jQuery.js is just 15KB if you're using the minified version, and these would be totally absent if you were using a theme that doesn't require it.
You should probably look for a lightweight theme without jQuery instead of hacking it and then seeing the theme break in several places because they're looking for those js files.
回答7:
Look in the source of your rendered page; Wordpress often includes jQuery by default when <?php wp_head(); ?>
is called in header.php, so you may stil see jQuery included in your site.
If you remove <?php wp_head(); ?>
in header.php, you might loose other plugin functionality, as many plugins "hook" into Wordpress at that point.
But including jQuery isn't that big of a deal. It's small and Wordpress depends on it for some things.
回答8:
function my_init() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', false);
}
}
add_action('init', 'my_init');
It's correct - removes jquery library js. Code from other answers removes all js (even js that your installed plugins adds)
Tested on 4.3.1
回答9:
I was able to shave 2.2 seconds off my "Events" page load speed by de-registering jQuery. jQuery is a nice to have but in my opinion page speed is so much more important.
You'll never have a user hang around for more than 5 seconds so if jQuery is causing you performance problems, then I say get rid.
回答10:
WordPress 5 and above (Tested)
Remove the default jquery and add your jquery from folder or from CDN. Use only one, 'local' or 'cdn'
// Remove the WordPress default jquery
wp_deregister_script( 'jquery' );
// using a local file
wp_enqueue_script(
'jquery', get_template_directory_uri() . '/lib/jquery-3.3.1.min.js','', '3.3.1', true
);
// using CDN
wp_enqueue_script(
'jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', '', '3.3.1', true
);
// $handle: 'jquery'
// $src:
// local: get_template_directory_uri() . '/lib/jquery-3.3.1.min.js'
// cdn: '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
// $deps: '' (leave it empty)
// $ver: '3.3.1'
// $in_footer: true (boolean)
Syntax
wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );