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

改造WooCommerce SKU加购插件 支持URL参数批量添加多商品到购物车

WooCommerce 改造SKU加购插件支持多商品批量加购

改造方案

原插件仅支持URL传入单个商品ID或SKU完成加购,无法处理逗号分隔的多SKU参数。改造后插件完全兼容原有单商品加购逻辑,同时支持多SKU/多ID批量加购。
改造逻辑如下:

  • 提前拦截页面请求,识别add-to-cart参数
  • 若参数包含英文逗号,拆分为独立的商品标识数组
  • 逐个匹配标识对应的商品ID,校验商品可购买状态后加入购物车
  • 处理完成后跳转,避免WooCommerce默认逻辑重复执行
  • 保留原插件单SKU转ID的核心能力,兼容旧链接

改造后完整代码

/**
 * Plugin Name: WooCommerce: 支持SKU/多SKU批量加购
 * Description: 支持URL传入单个商品ID、单个SKU、逗号分隔多个SKU/ID实现自动加购
 * Version: 1.1
 * Author: 基于Remi Corson版本改造
 */
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 禁止直接访问文件
}

class WC_Add_to_Cart_by_SKU {

    public function __construct() {
        define( 'WC_ADD_TO_CART_BY_SKU_VERSION', '1.1' );
        define( 'WC_ADD_TO_CART_BY_SKU_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
        define( 'WC_ADD_TO_CART_BY_SKU_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
        
        // 注册多SKU加购处理逻辑
        add_action( 'template_redirect', array( $this, 'process_multi_sku_add_to_cart' ) );
        // 保留单SKU转商品ID的兼容逻辑
        add_filter( 'woocommerce_add_to_cart_product_id', array( $this, 'get_product_id_by_product_sku' ) );
    }
    
    /**
     * 批量处理多SKU/多ID加购
     */
    public function process_multi_sku_add_to_cart() {
        if ( ! isset( $_REQUEST['add-to-cart'] ) ) {
            return;
        }

        $add_to_cart_raw = wp_unslash( $_REQUEST['add-to-cart'] );
        
        // 无逗号分隔走原生单商品逻辑,不额外处理
        if ( strpos( $add_to_cart_raw, ',' ) === false ) {
            return;
        }

        // 拆分参数,过滤空值
        $product_items = array_filter( array_map( 'trim', explode( ',', $add_to_cart_raw ) ) );
        if ( empty( $product_items ) ) {
            return;
        }

        // 清除原生参数,避免重复处理
        unset( $_REQUEST['add-to-cart'] );
        wc_nocache_headers();

        $added_count = 0;
        foreach ( $product_items as $item_identifier ) {
            // 获取真实商品ID
            $product_id = $this->get_product_id_by_product_sku( $item_identifier );
            $product = wc_get_product( $product_id );
            // 跳过不存在、不可购买的商品
            if ( ! $product || ! $product->is_purchasable() ) {
                continue;
            }
            // 默认加购数量1,可根据需求修改第二个参数
            if ( WC()->cart->add_to_cart( $product_id, 1 ) ) {
                $added_count++;
            }
        }

        // 加购完成后跳转,默认跳购物车,可自行修改地址
        if ( $added_count > 0 ) {
            $redirect_url = apply_filters( 'woocommerce_add_to_cart_redirect', wc_get_cart_url() );
            wp_safe_redirect( $redirect_url );
            exit;
        }
    }
    
    /**
     * 根据SKU查询对应商品ID,兼容纯数字ID传参
     */
    public function get_product_id_by_product_sku( $add_to_cart ) {
        // 纯数字直接判定为商品ID返回
        if ( is_numeric( $add_to_cart ) ) {
            return (int)$add_to_cart;
        }

        global $wpdb;
        $product_id = $wpdb->get_var( 
            $wpdb->prepare( 
                "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", 
                $add_to_cart 
            ) 
        );

        return $product_id ? (int)$product_id : $add_to_cart;
    }
    
}

new WC_Add_to_Cart_by_SKU();

使用说明

  • 将上述代码保存为独立PHP文件,上传至站点wp-content/plugins/目录,在WordPress后台插件列表激活即可使用
  • 完全兼容原有单商品加购链接:支持?add-to-cart=数字ID和?add-to-cart=商品SKU两种格式
  • 多商品批量加购直接用英文逗号分隔多个SKU/ID即可,示例格式:https://你的站点域名/?add-to-cart=SKU001,SKU002,123,访问链接后会自动将所有有效商品加入购物车

自定义调整

  • 若需要修改加购后跳转地址,替换代码中wc_get_cart_url()为目标地址即可,比如跳首页用home_url()
  • 若需要修改单个商品默认加购数量,调整WC()->cart->add_to_cart( $product_id, 1 )里的数字1为需要的数量即可
  • 代码会自动跳过无效、下架、无库存的商品,不会中断加购流程

内容的提问来源于stack exchange,提问作者Khalid Mayson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:24:26