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

WooCommerce中添加指定分类商品到购物车时如何仅执行一次脚本

实现WooCommerce添加指定分类商品时单次执行清空localStorage脚本

核心逻辑

wc_add_notice能实现跳转后单次展示、刷新即消失的效果,本质是WooCommerce将提示数据存在用户Session中,渲染完成后立即销毁对应数据。直接复用这套Session存储机制即可实现需求,不需要嵌套钩子。

可直接使用的代码

将以下代码加入主题的functions.php或自定义功能插件中:

// 1. 添加指定分类商品到购物车时,在Session中写入临时执行标记
add_action('woocommerce_add_to_cart', 'set_clear_storage_flag', 10, 2);
function set_clear_storage_flag( $cart_item_key, $product_id ){
    $target_category_id = 30; // 替换为你需要判断的商品分类ID
    $product_categories = get_the_terms($product_id, 'product_cat');

    if ( empty($product_categories) || is_wp_error($product_categories) ) {
        return;
    }

    foreach ( $product_categories as $category ) {
        if ( $category->term_id === $target_category_id ) {
            WC()->session->set('run_clear_localstorage', true);
            break;
        }
    }
}

// 2. 结账页检测标记,输出脚本后立即删除标记保证仅执行一次
add_action('wp_footer', 'output_clear_storage_script');
function output_clear_storage_script(){
    // 仅在结账页面执行逻辑
    if ( !is_checkout() ) {
        return;
    }

    // 检测是否存在待执行标记
    if ( WC()->session->get('run_clear_localstorage') ) {
        // 先删除标记,页面刷新后不会再触发
        WC()->session->__unset('run_clear_localstorage');
        // 输出清空localStorage的脚本
        ?>
        <script>
            localStorage.clear();
        </script>
        <?php
    }
}

原有代码失效原因

  • 原有代码错误地将add_action('wp_footer')写在了woocommerce_add_to_cart的回调函数内部。WooCommerce添加购物车完成后会执行302跳转,跳转后的结账页是全新的请求,不会保留上一个请求中注册的钩子回调,因此脚本根本不会被输出到页面。
  • 额外注意:woocommerce_add_to_cart是动作钩子(Action),不是过滤器(Filter),原代码用add_filter挂载不符合WordPress开发规范,建议替换为add_action。
  • 上述代码完全匹配需求:仅当添加的商品属于指定分类时触发,跳转至结账页时执行一次脚本,页面刷新后脚本不再加载。

内容的提问来源于stack exchange,提问作者wp-ap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:03:26