隐藏WooCommerce中基于变体产品属性的送货方式

时间:2019-03-17 10:14:09

标签: php wordpress woocommerce product shipping-method

在WooCommerce中,每个可变产品都有两种送货方式两个产品属性值。客户应选择这些属性值之一,以将产品添加到购物车。

我正在尝试根据版本中选择的产品属性来取消某些送货方式。例如,如果选择了产品属性“ a”,则在购物车页面中应仅显示运输方式1;如果选择了产品属性“ b”,则应在购物车中显示运输方式2。

我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

以下代码将在下面的代码中基于定义为设置的产品变型产品属性术语隐藏定义的运输方式:

add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_variation_product_attribute', 10, 2 );
function hide_shipping_method_based_on_variation_product_attribute( $rates, $package ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // HERE define the Product Attibute taxonomy (starts always with "pa_")
    $taxonomy = 'pa_color'; // Example for "Color"

    // HERE define shipping method rate ID to be removed from product attribute term(s) slug(s) (pairs) in this array
    $data_array = array(
        'flat_rate:12'      => array('blue'),
        'local_pickup:13'   => array('black', 'white'),
    );

    // Loop through cart items
    foreach( $package['contents'] as $cart_item ){
        if( isset($cart_item['variation']['attribute_'.$taxonomy]) ) {
            // The product attribute selected term slug
            $term_slug = $cart_item['variation']['attribute_'.$taxonomy];

            // Loop through our data array
            foreach( $data_array as $rate_id => $term_slugs ) {
                if( in_array($term_slug, $term_slugs) && isset($rates[$rate_id]) ) {
                    // We remove the shipping method corresponding to product attribute term as defined
                    unset($rates[$rate_id]);
                }
            }
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

  

刷新送货缓存 (必需)

     
      
  1. 此代码已保存在您的function.php文件中。
  2.   
  3. 检查购物车是否为空...
  4.   
  5. 在运输区域设置中,禁用/保存任何运输方式,然后启用“后退” /保存。
  6.   
     

您已完成,并且可以对其进行测试。