配送クラスに基づいてWooCommerceの配送方法を条件付きで非表示

孵化場

このサイト(ここ)(WP v4.9)でWooCommerce v3.2.4を使用し、定額料金が適用されているオーバーウェイト/オーバーサイズの配送クラスの11の製品:カナダで
$ 20、米国で$ 25

他のすべての製品は、注文が100ドルを超えない限り、10ドル(カナダ)と15ドル(米国)の定額配送があり、送料無料が自動的に適用されます。

カートに重量超過/サイズ超過の商品がある場合、クライアントは送料無料を無効にしたいと考えています。問題は、カート内に通常の商品と特大の商品が混在している場合、利用できる配送方法がないとカートに表示され、配送方法が適用されないことです。

私が使用していますXAdapter Woocommerce送料表レートを「太りすぎ」配送クラスに高いコストを適用するプラグイン。

更新

WooCommerce Shipping Zone設定を使用して、特定の配送クラスに定額料金を設定できることに気付いたので、このプラグインを無効にしました。以下のスクリーンショットを参照してください。配送ゾーンの1つの定額設定

私はいくつかのコードを使用して:

  • 「太りすぎ」の配送クラスがカートにある場合は、送料無料と定額料金を非表示にします
  • hide the "Overweight" Shipping Method if that class does not exist (163 being the id of the Shipping Class)

Here is that code:

add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 100, 2);

function wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package){
    $hide_when_shipping_class_exist = array(
        163 => array(
            'flat_rate:1',
            'flat_rate:2',
            'free_shipping:3',
            'free_shipping:5'
        )
    );

    $hide_when_shipping_class_not_exist = array(
        163 => array( 'wf_woocommerce_shipping_pro:overweightoversizeoverweight')
    );

    $shipping_class_in_cart = array();
    foreach(WC()->cart->cart_contents as $key => $values) {
       $shipping_class_in_cart[] = $values['data']->get_shipping_class_id();
    }

    foreach($hide_when_shipping_class_exist as $class_id => $methods) {
        if(in_array($class_id, $shipping_class_in_cart)){
            foreach($methods as & $current_method) {
                unset($available_shipping_methods[$current_method]);
            }
        }
    }

    foreach($hide_when_shipping_class_not_exist as $class_id => $methods) {
        if(!in_array($class_id, $shipping_class_in_cart)){
            foreach($methods as & $current_method) {
                unset($available_shipping_methods[$current_method]);
            }
        }
    }
    return $available_shipping_methods;
}

EDIT

Here is a list of IDs of the rates per shipping zone:

Canada

  • Regular Flat rate | ID: flat_rate:1
  • Free Shipping | ID: free_shipping:3
  • Local Pickup | ID: local_pickup:4

USA

  • Regular Flat rate | ID: flat_rate:2
  • Free Shipping | ID: free_shipping:5
LoicTheAztec

UPDATE 2: (Without any plugin need, just settings and code)

The function below will always show "Local pickup" shipping for canada and will:

  1. Hide free shipping methods when "Oversize" shipping class is in cart items. For the "Flat rate" Shipping Methods, the cost will be the one set for "Oversize" shipping class.
  2. if "Oversize" Shipping Class is not set in cart items:
    • If cart amount is less than the target free shipping amount: Hide "Free shipping".
    • カートの金額が目標の送料無料の金額を超えている場合:「定額」の配送方法を非表示にします。

そのコードは次のとおりです。

add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 100, 2);
function wf_hide_shipping_method_based_on_shipping_class($rates, $package){

    // Defining & Initializing variables
    $free_shipping_rates = array(
        'free_shipping:3',
        'free_shipping:5'
    );

    // Defining & Initializing variables
    $shipping_class_id = 163;
    $free = array();
    $over_found = $has_free = false;

    // Check if "Oversize" shipping class (163) is in cart items
    foreach(WC()->cart->get_cart() as $key => $cart_item){
        if($cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
            $over_found = true;
            break;
        }
    }

    // 1. Hiding free shipping but always show Local pickup for Canada
    if( $over_found ){
        foreach($free_shipping_rates as $rate_id) {
            unset( $rates[$rate_id] );
        }
    }
    // 2. Hiding Flat rate OR Free shipping --> depending on cart amount
    //   (but always show Local pickup for Canada)
    else {
        foreach ( $rates as $rate_id => $rate ) {

            // Hide all "Flat rates" when "Free Shipping" is available
            if ( 'free_shipping' === $rate->method_id ) {
                $free[ $rate_id ] = $rate;
                $has_free = true;
            } elseif ( 'local_pickup' === $rate->method_id ) {
                $free[ $rate_id ] = $rate;
            }
        }
        return $has_free ? $free : $rates;
    }
    return $rates;
}

コードは、アクティブな子テーマ(またはテーマ)のfunction.phpファイル、または任意のプラグインファイルに含まれます。

WooCommerce 3でテストされ、動作します。


配送キャッシュを更新します(時々必要です)
1)最初にカートを空にします。
2)このコードはすでにfunction.phpファイルに保存されています。
3)配送ゾーンの設定に移動し、1つの「定額」(たとえば)と「保存」を無効にします次に、その「定額」と「保存」を再度有効にします。完了し、テストできます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

選択した配送に基づいて、WooCommerceのチェックアウトフィールドを条件付きで非表示にします

分類Dev

WooCommerceの配送方法を条件付きで非表示にする

分類Dev

WooCommerceの配送クラスに基づいて、特定の単語を含む配送方法を無効にする

分類Dev

Woocommerce3の配送クラスに基づいて配送方法をフィルタリングする

分類Dev

WooCommerce-カートの小計に基づいて配送方法を非表示/表示

分類Dev

ラジオボタンに基づいてWooCommerceの配送料を表示/非表示

分類Dev

Woocommerceの商品カテゴリに基づいて配送方法を非表示にする

分類Dev

WooCommerceのチェックアウトフィールドの値に基づいて配送方法を表示/非表示

分類Dev

WooCommerceの一部の配送クラスの配送方法を非表示にする

分類Dev

WooCommerceの特定の配送クラスのすべての定額配送方法を非表示にする

分類Dev

WooCommerceカートの配送クラスに基づいてカスタムテキストを表示する

分類Dev

Woocommerceで選択した配送方法に基づいて支払い方法を非表示にする

分類Dev

WooCommerceで選択した配送方法に基づいて支払い方法を非表示にする

分類Dev

Woocommerce選択した配送クラスに基づいて、チェックアウト時に配送方法のタイトルを変更する

分類Dev

WooCommerceのユーザーメタデータに基づいて配送方法を表示または非表示にする

分類Dev

WooCommerceチェックアウトページのラジオボタンに基づいて配送方法を非表示にする

分類Dev

配送方法に基づいてWoocommerceの注文ステータスを変更する

分類Dev

Woocommerce3の配送方法に基づいてチェックアウトフィールドを表示または非表示にします

分類Dev

Woocommerceメール通知で配送方法に基づいてカスタムコンテンツを表示する

分類Dev

Woocommerceの特定の配送クラスに基づいた商品バッジを表示する

分類Dev

WooCommerceの製品税クラスに基づいて配送クラスを調整します

分類Dev

配送方法の初期化ですべての配送クラスを取得する-Woocommerce

分類Dev

WooCommerceの商品やカテゴリに基づいて特定の配送オプションを非表示にする

分類Dev

条件付きで他のクラスの存在に基づいて要素を非表示にします

分類Dev

WooCommerceのカートアイテムの合計に基づいてすべての配送方法を非表示にします

分類Dev

Woocommerceの配送クラスに基づく送料割引

分類Dev

属性に基づいて配送クラスをWooCommerceバリエーションに自動割り当て

分類Dev

WooCommerceで配送方法と支払い方法を非表示にする

分類Dev

woocommerceは条件付きで配送方法を番号に隠します

Related 関連記事

  1. 1

    選択した配送に基づいて、WooCommerceのチェックアウトフィールドを条件付きで非表示にします

  2. 2

    WooCommerceの配送方法を条件付きで非表示にする

  3. 3

    WooCommerceの配送クラスに基づいて、特定の単語を含む配送方法を無効にする

  4. 4

    Woocommerce3の配送クラスに基づいて配送方法をフィルタリングする

  5. 5

    WooCommerce-カートの小計に基づいて配送方法を非表示/表示

  6. 6

    ラジオボタンに基づいてWooCommerceの配送料を表示/非表示

  7. 7

    Woocommerceの商品カテゴリに基づいて配送方法を非表示にする

  8. 8

    WooCommerceのチェックアウトフィールドの値に基づいて配送方法を表示/非表示

  9. 9

    WooCommerceの一部の配送クラスの配送方法を非表示にする

  10. 10

    WooCommerceの特定の配送クラスのすべての定額配送方法を非表示にする

  11. 11

    WooCommerceカートの配送クラスに基づいてカスタムテキストを表示する

  12. 12

    Woocommerceで選択した配送方法に基づいて支払い方法を非表示にする

  13. 13

    WooCommerceで選択した配送方法に基づいて支払い方法を非表示にする

  14. 14

    Woocommerce選択した配送クラスに基づいて、チェックアウト時に配送方法のタイトルを変更する

  15. 15

    WooCommerceのユーザーメタデータに基づいて配送方法を表示または非表示にする

  16. 16

    WooCommerceチェックアウトページのラジオボタンに基づいて配送方法を非表示にする

  17. 17

    配送方法に基づいてWoocommerceの注文ステータスを変更する

  18. 18

    Woocommerce3の配送方法に基づいてチェックアウトフィールドを表示または非表示にします

  19. 19

    Woocommerceメール通知で配送方法に基づいてカスタムコンテンツを表示する

  20. 20

    Woocommerceの特定の配送クラスに基づいた商品バッジを表示する

  21. 21

    WooCommerceの製品税クラスに基づいて配送クラスを調整します

  22. 22

    配送方法の初期化ですべての配送クラスを取得する-Woocommerce

  23. 23

    WooCommerceの商品やカテゴリに基づいて特定の配送オプションを非表示にする

  24. 24

    条件付きで他のクラスの存在に基づいて要素を非表示にします

  25. 25

    WooCommerceのカートアイテムの合計に基づいてすべての配送方法を非表示にします

  26. 26

    Woocommerceの配送クラスに基づく送料割引

  27. 27

    属性に基づいて配送クラスをWooCommerceバリエーションに自動割り当て

  28. 28

    WooCommerceで配送方法と支払い方法を非表示にする

  29. 29

    woocommerceは条件付きで配送方法を番号に隠します

ホットタグ

アーカイブ