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

WooCommerce新手求助:如何限制特定产品ID仅配送至指定邮编?

实现WooCommerce特定产品仅配送至指定邮编的功能

原代码的问题说明

  1. PHP中不等于运算符应为!=(松散比较)或!==(严格比较),你用了≠会触发语法错误
  2. 获取用户邮编的方式错误,正确方式是调用WC()->customer->get_shipping_postcode()(配送邮编)或WC()->customer->get_billing_postcode()(账单邮编)
  3. 未判断购物车中是否包含需限制的产品,原逻辑会对所有产品生效,不符合需求
  4. 在woocommerce_available_payment_gateways过滤器内动态添加动作,可能导致重复输出通知

完整实现代码

将以下代码添加到主题的functions.php文件中:

// 定义需要限制配送的产品ID数组和允许的邮编
define('RESTRICTED_PRODUCT_IDS', array(10, 20, 30)); // 替换为你的10个目标产品ID
define('ALLOWED_ZIPCODES', array('713102')); // 替换为允许配送的邮编,多个邮编可添加进数组

add_filter('woocommerce_available_payment_gateways', 'restrict_payment_for_specific_products_by_zip', 20, 1);
function restrict_payment_for_specific_products_by_zip($gateways) {
    // 仅在结账页面生效
    if (!is_checkout() || is_wc_endpoint_url()) {
        return $gateways;
    }

    $has_restricted_product = false;
    $user_zipcode = WC()->customer->get_shipping_postcode();

    // 检查购物车是否包含限制产品
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (in_array($cart_item['product_id'], RESTRICTED_PRODUCT_IDS)) {
            $has_restricted_product = true;
            break;
        }
    }

    // 若有限制产品且邮编不在允许列表,隐藏COD网关(可按需修改网关ID)
    if ($has_restricted_product && !in_array($user_zipcode, ALLOWED_ZIPCODES)) {
        if (isset($gateways['cod'])) {
            unset($gateways['cod']);
        }
        // 添加配送限制提示
        add_action('woocommerce_checkout_before_order_review', 'show_delivery_restriction_notice');
    }

    return $gateways;
}

function show_delivery_restriction_notice() {
    wc_print_notice(__('您购物车中的部分产品仅支持配送至指定邮编,请检查配送地址或移除相关产品。', 'woocommerce'), 'error');
}

代码说明

  • RESTRICTED_PRODUCT_IDS:替换为需要限制配送的产品ID,多个ID用逗号分隔
  • ALLOWED_ZIPCODES:可添加多个允许的邮编,格式为array('713102', '713103')
  • 逻辑会先检测购物车是否含限制产品,再验证用户配送邮编,不符合条件则隐藏COD支付网关并显示错误提示
  • 若需隐藏配送方式而非支付网关,可改用woocommerce_package_rates过滤器替换上述逻辑

内容的提问来源于stack exchange,提问作者Swarno Digital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:15:03