You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在非WooCommerce页面移除其样式与脚本?

问题描述

想要在非WooCommerce页面移除WooCommerce加载的脚本与样式,自行在functions.php中编写了代码但未生效。排查后发现,WooCommerce注册脚本时使用的add_action未设置优先级(默认优先级为10),相关代码如下:

add_action( 'wp_enqueue_scripts', array( __CLASS__, 'load_scripts' ) );

尝试的代码:

/**
 * Manage WooCommerce styles and scripts.
 */
function grd_woocommerce_script_cleaner() {
    
    // Remove the generator tag
    remove_action( 'wp_head', array( $GLOBALS['woocommerce'], 'generator' ) );

    // Unless we're in the store, remove all the cruft!
    if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
        wp_dequeue_style( 'woocommerce_frontend_styles' );
        wp_dequeue_style( 'woocommerce-general');
        wp_dequeue_style( 'woocommerce-layout' );
        wp_dequeue_style( 'woocommerce-smallscreen' );
        wp_dequeue_style( 'woocommerce_fancybox_styles' );
        wp_dequeue_style( 'woocommerce_chosen_styles' );
        wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
        wp_dequeue_script( 'selectWoo' );
        wp_deregister_script( 'selectWoo' );
        wp_dequeue_script( 'wc-add-payment-method' );
        wp_dequeue_script( 'wc-lost-password' );
        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-credit-card-form' );
        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( 'jquery-payment' );
        wp_dequeue_script( 'fancybox' );
        wp_dequeue_script( 'jqueryui' );
    }
}
add_action( 'wp_enqueue_scripts', 'grd_woocommerce_script_cleaner', 999 );
解决方案

问题核心是执行时机不对——虽然你设置了999的优先级,但部分WooCommerce资源可能在wp_enqueue_scripts钩子后仍会加载,且逐个dequeue的方式不够彻底。更可靠的做法是先移除WooCommerce默认的资源加载动作,再仅在需要的页面重新启用:

/**
 * 仅在WooCommerce相关页面加载脚本与样式
 */
function grd_conditionally_load_woocommerce_assets() {
    // 移除WooCommerce默认的脚本加载动作
    remove_action( 'wp_enqueue_scripts', array( WC_Frontend_Scripts::class, 'load_scripts' ) );
    
    // 仅在WooCommerce页面重新加载资源
    if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) {
        add_action( 'wp_enqueue_scripts', array( WC_Frontend_Scripts::class, 'load_scripts' ) );
    }
    
    // 移除generator标签
    remove_action( 'wp_head', array( $GLOBALS['woocommerce'], 'generator' ) );
}
// 优先级设为9,确保在WooCommerce注册动作之前执行
add_action( 'wp_enqueue_scripts', 'grd_conditionally_load_woocommerce_assets', 9 );

补充说明

  • 优先级设为9:WooCommerce默认用优先级10注册load_scripts,我们需要在它之前执行remove_action才能生效。
  • 新增is_account_page():覆盖「我的账户」页面,避免该页面样式或脚本丢失。
  • 这种方式比逐个dequeue更高效,能彻底阻止WooCommerce在非目标页面加载任何不必要的资源。

内容的提问来源于stack exchange,提问作者Sandeep Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:43