Skip to content

Instantly share code, notes, and snippets.

@DevinWalker
Last active October 9, 2024 00:35
Show Gist options
  • Save DevinWalker/7621777 to your computer and use it in GitHub Desktop.
Save DevinWalker/7621777 to your computer and use it in GitHub Desktop.
Only load WooCommerce scripts on shop pages and checkout + cart
/**
* Optimize WooCommerce Scripts
* Remove WooCommerce Generator tag, styles, and scripts from non WooCommerce pages.
*/
add_action( 'wp_enqueue_scripts', 'child_manage_woocommerce_styles', 99 );
function child_manage_woocommerce_styles() {
//remove generator meta tag
remove_action( 'wp_head', array( $GLOBALS['woocommerce'], 'generator' ) );
//first check that woo exists to prevent fatal errors
if ( function_exists( 'is_woocommerce' ) ) {
//dequeue scripts and styles
if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
wp_dequeue_style( 'woocommerce_frontend_styles' );
wp_dequeue_style( 'woocommerce_fancybox_styles' );
wp_dequeue_style( 'woocommerce_chosen_styles' );
wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
wp_dequeue_script( 'wc_price_slider' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
wp_dequeue_script( 'wc-checkout' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-cart' );
wp_dequeue_script( 'wc-chosen' );
wp_dequeue_script( 'woocommerce' );
wp_dequeue_script( 'prettyPhoto' );
wp_dequeue_script( 'prettyPhoto-init' );
wp_dequeue_script( 'jquery-blockui' );
wp_dequeue_script( 'jquery-placeholder' );
wp_dequeue_script( 'fancybox' );
wp_dequeue_script( 'jqueryui' );
}
}
}
@DevinWalker
Copy link
Author

I've removed the opening PHP tag so people won't be confused about that.

@tomherold
Copy link

After adding this code I still see 3 CSS scripts loaded...

@tingsao
Copy link

tingsao commented Feb 18, 2015

@DevinWalker Thank you. Do you add this to functions.php?

@tingsao
Copy link

tingsao commented Feb 18, 2015

@DevinWalker nevermind, I found your full article. Very nice write-up.
https://impress.org/how-to-load-woocommerce-scripts-and-styles-only-in-shop/

@AF4Q
Copy link

AF4Q commented Apr 5, 2015

I guess, this code needs some updating as it doesnt remove everything with the latest version of WooCommerce.

@APlusDesign
Copy link

IF you are using latest version of Woo, you need to add these three lines to remove ALL styles

wp_dequeue_style( 'woocommerce-general' );
            wp_dequeue_style( 'woocommerce-layout' );
            wp_dequeue_style( 'woocommerce-smallscreen' );

@cnasikas
Copy link

cnasikas commented Oct 3, 2015

Or you can remove all styles at once

add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );

@foamymedia
Copy link

this doesnt seem to work for site working on - https://officialicloudunlock.co.uk ? any ideas?

@landsman
Copy link

landsman commented Aug 1, 2016

Thanks @cnasikas, CSS are good to remove :)

I try remove only few JS rows but not works.

@jaswrks
Copy link

jaswrks commented Jan 25, 2017

Here's what worked for me. Removes all styles & scripts.

if (!is_woocommerce() && !is_cart() && !is_checkout()) {
    remove_action('wp_enqueue_scripts', [WC_Frontend_Scripts::class, 'load_scripts']);
    remove_action('wp_print_scripts', [WC_Frontend_Scripts::class, 'localize_printed_scripts'], 5);
    remove_action('wp_print_footer_scripts', [WC_Frontend_Scripts::class, 'localize_printed_scripts'], 5);
}

@alenabdula
Copy link

Following worked for me to dequeue both styles and scripts. While example above by @jaswsinc didn't.

add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_styles_scripts', 99 );

function dequeue_woocommerce_styles_scripts() {
    if ( function_exists( 'is_woocommerce' ) ) {
        if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
            # Styles
            wp_dequeue_style( 'woocommerce-general' );
            wp_dequeue_style( 'woocommerce-layout' );
            wp_dequeue_style( 'woocommerce-smallscreen' );
            wp_dequeue_style( 'woocommerce_frontend_styles' );
            wp_dequeue_style( 'woocommerce_fancybox_styles' );
            wp_dequeue_style( 'woocommerce_chosen_styles' );
            wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
            # Scripts
            wp_dequeue_script( 'wc_price_slider' );
            wp_dequeue_script( 'wc-single-product' );
            wp_dequeue_script( 'wc-add-to-cart' );
            wp_dequeue_script( 'wc-cart-fragments' );
            wp_dequeue_script( 'wc-checkout' );
            wp_dequeue_script( 'wc-add-to-cart-variation' );
            wp_dequeue_script( 'wc-single-product' );
            wp_dequeue_script( 'wc-cart' );
            wp_dequeue_script( 'wc-chosen' );
            wp_dequeue_script( 'woocommerce' );
            wp_dequeue_script( 'prettyPhoto' );
            wp_dequeue_script( 'prettyPhoto-init' );
            wp_dequeue_script( 'jquery-blockui' );
            wp_dequeue_script( 'jquery-placeholder' );
            wp_dequeue_script( 'fancybox' );
            wp_dequeue_script( 'jqueryui' );
        }
    }
}

@Basilou38
Copy link

Hi @DevinWalker

I apply your code, thanks for sharing, indeed, woocommerce is faster!

does your code remove the ajax function from the "add to cart" button ? Because I use a plugin (woo popup) to create an animation when we add a product to the cart, this plugin uses ajax (otherwise it does not work), my problem is that if I use your code, my plugin
" woo popup "does not work well, there is a conflict.

Do you have a solution to let ajax activate ?

@Basilou38
Copy link

up

@blondiegeek
Copy link

Good info - any pointers on how to modify the above code so that the woocommerce geolocation functionality doesn't get called for a given page? We need this on our site's store pages, but it's extremely slow and so we'd of course like to avoid calling it on all of the non-store pages.

For clarity, I'm talking about the "geolocate with page caching support", that results in URLs with parameters like ?v=11aedd0e4327 appended.

Thanks in advance for your help!

@RiFi2k
Copy link

RiFi2k commented May 16, 2018

Big props to @jaswrks, you saved me from rooting through api documentation. All scripts 100% gone, 3 lines of code.

remove_action('wp_enqueue_scripts', [WC_Frontend_Scripts::class, 'load_scripts']);
remove_action('wp_print_scripts', [WC_Frontend_Scripts::class, 'localize_printed_scripts'], 5);
remove_action('wp_print_footer_scripts', [WC_Frontend_Scripts::class, 'localize_printed_scripts'], 5);

@gtamborero
Copy link

Oh god! that was dificult! Thanks @alenabdula . Your code inside functions.php works perfectly ;)

@churongcon
Copy link

churongcon commented Dec 30, 2018

@RiFi2k
This action not work, my site will display Photoswipe button

@petkovtsvetelin
Copy link

It's not working anymore. Any tips?

@CatinhoCR
Copy link

CatinhoCR commented Nov 25, 2020

@DevinWalker @jaswrks @Basilou38
Im wondering how y'all manage to replace all those built in WC scripts (and any plugins) with custom code tho?
Dev-Time wise seems a bit harsh.. The cart updating, the order generation from checkout, all the store notices, messages and most importantly form fields -> form submission seem to be heavily depend on those scripts.. Just wondering, any tips here r highly appreciated if there's some nice workflow or "shortcuts"

P.S: Still relevant today.
You could also do (functions.php)

add_filter('woocommerce_enqueue_styles', '__return_empty_array');

for CSS in 1 line pretty much.. it's in the Theming Docs.

Side Note:
This still seems to work for me with all latest versions of WP & WC...
Don't forget to add it inside a function, and then add_action to invoke it...

IF you are using latest version of Woo, you need to add these three lines to remove ALL styles

wp_dequeue_style( 'woocommerce-general' );
 wp_dequeue_style( 'woocommerce-layout' );
 wp_dequeue_style( 'woocommerce-smallscreen' );
function gist_rm_wc_scripts() {
   if (function_exists('is_woocommerce') {
     # wp_dequeue above here
   }
}
add_action('wp_enqueue_scripts', 'gist_rm_wc_scripts');

@theshane9
Copy link

Hey guys, I have disable WooCommerce styles and scripts sitewide as I need good performance and it was killing my site performance. I have an issue now where the login form and other account forms have no styling. How can I target the account pages of members so that it displays the styling only for any user account related pages?

@srikat
Copy link

srikat commented Mar 7, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment