特定の都道府県で送料を加算する方法

スポンサーリンク

特定の都道府県の場合に送料を加算する方法です。時々キーワードで検索で来てくれる方がいらしたのですが、意外にもまだ記事にしていませんでした。

そんなに難しいカスタマイズではありませんので、さくっと書いておきます。

「全国一律送料600円(ただし北海道・沖縄は+300円)」等としたい場合に利用します。

郵便番号別に送料を加算する場合(もっと細かく地域を限定したい場合)は、以下のエントリーをご覧下さい。

特定地域への配送料を加算する方法 (過去エントリー)

もくじ

  1. 利用するフック
  2. functions.phpにフィルターフックを記載
  3. まとめ

1. 利用するフック

特定地域への配送料を加算する方法」と同じフックを使います。カスタマイズ自体もほぼ同じです。

  • フックの記述・・・usces_filter_set_cart_fees_shipping_charge
  • フックの場所・・・use-e-shop/classes/useshop.class.php

送料を条件により変えたりしたい場合は、このフックを使います。

2. functions.phpにフィルターフックを記載

以下のコードを使用中のテーマのfunctions.phpに追加します。

//特定の県に送料を加算する
add_filter('usces_filter_set_cart_fees_shipping_charge', 'mypref_filter_set_cart_fees_shipping_charge', 10, 3);
function mypref_filter_set_cart_fees_shipping_charge($shipping_charge, $cart, $entry){
    $myprefs = array('沖縄県', '北海道');
    if(in_array($entry['delivery']['pref'], $myprefs)){
        $shipping_charge += 300; //300円加算する
    }
    return $shipping_charge;
}

都道府県の設定

送金を加算したい都道府県は、4行目のarray()のカッコ中に、半角カンマで区切って入れます。

送料を減算させたい場合

送料を減算したい場合は、6行目の式で += となっているところを -= と、プラスをマイナスにすることで可能です。

送料を固定したい場合

「北海道と沖縄は送料固定で1000円」等とする場合は、6行目の式で += となっているところを = と、プラスを削除します。

3. まとめ

このフックを使いこなせば、細かい送料設定が出来るようになります。

が、あまりに細かい送料設定は仕事のコストもかかりますし、顧客がわかりにくくなってしまうというデメリットもあります。

お客様の選択肢と利便性、それとコストのバランスが重要ですね。

10 Responses to “特定の都道府県で送料を加算する方法”

  1. km より:

    大変お世話になっております。

    一点質問させて頂きたいのですが、「特定のSKUがカートに入っている場合、送料追加」とその送料にかんしまして「特定の都道府県で送料を加算する方法」を組み合わせることは可能なのでしょうか?

    もし可能でしたらヒントやアドバイスなどを頂けますと大変助かります。

    いつもありがとうございます。

    • まめ子(管理人) より:

      「特定のSKUが入っている時に加算」と「特定の都道府県で加算」が別々に存在する設定であれば、同じフィルターフックを使うことになるので、どちらかのadd_filterの第3引数を11にするとかして、別々に作動するようにすれば出来そうです。「特定のSKUが・・・」のカスタマイズの一つのフックの中に全て組み込むことも出来ると思いますが、後々の管理のことを考えて、私でしたら別々にフィルターフックを作ると思います。
      「特定のSKUが入っていて、且つ特定の都道府県の時だけに送料加算」という設定でしたら、当然ながら全ての条件を一つのフィルターフック内に組み込まないといけないですが、その場合はif文の中をAND条件にすれば出来そうかなと思います。

  2. km より:

    まめ子様

    さっそくのご返事ありがとうございます。

    上記の第3引数およびAND条件、是非参考にさせて頂きます!

    また、例えば送料名がAかBの時、500円を追加するといったことも可能でしょうか?
    例えば下記のようにできるとすれば、XXXXXXXXXXXXXXXXXに入る値はまめ子様はどのように発見されていらっしゃいますでしょうか?
    $deliveryname = array(‘A’, ‘B’);
    if(in_array(XXXXXXXXXXXXXXXXX, $deliveryname)){
    $shipping_charge += 500;
    }

    ご教授いただけますと、大変光栄です。

    いつも誠にありがとうございます。

    • まめ子(管理人) より:

      うまく行ってよかったですね。フックでカスタマイズする時は、コアファイルのフックの置き場所周辺のコードを読むようにしています。フックではいくつかの変数(パラメータ)が元のコードから引き渡されて使えるようになっている場合があるので、その時はそれらを使ったり、ない場合はフックの直前のコードをよく見て必要なデータを引っ張ってきたりします。コアファイルでのフックの記述場所を探す時は、Devasというフリーソフトを使っています(こちらでも紹介)。
      例えば今回のフックでは$shipping_charge, $cart, $entryという3つの変数を引き継いでいます。コードを組み立てる前に一旦print_r();に変数を代入してブラウザ上に表示させてみると、どのようなデータがそれらの変数に入っているのか見ることが出来るので、コードを作る時の参考になりますよ^^

  3. km より:

    まめ子様

    大変お世話になっております。
    第3引数が難しかったので、AND条件で試みました所、無事できました。

    いつも本当にお世話になり、ありがとうございます!
    感謝しております。

  4. Muratada より:

    こんにちわ!wardpress、welcart初心者なのですが、ちこちこといろいろ参考にさせていただきながらショップを構築しているモノなのですが、まめ子さまのこちらのブルグはとても分かりやすく、すばらしいので少しご指導お願いできればと書き込みさせていただきました。

    今、welcartで基本5000円以上送料無料設定で、北海道、沖縄だけ8000円以上で送料無料に設定できないかをあれこれ考えております。
    まめ子様の「一定金額以上の買物で送料無料ではなく値引き」と「特定の都道府県で送料を加算する方法」を組み合わせれば何とか可能だろうと考えているのですが、まず、テストでまめ子さんのこの2つのフィルターが自分のサイトで動くかテストしてからと思いやってみたところ、「一定金額以上の買物で送料無料ではなく値引き」はうまく動作するのですが、「特定の都道府県で送料を加算する方法」がなぜか動かないのです。素人なので、何もいじらずそのまま貼付けているのですが・・・!
    何が原因かお分かりになりますでしょうか?welcartは最新の1.4.15バージョンを使用しております。
    本当に素人なので、2つの違いが何かないか目をさらにして比べて見てテストしているのですが、何ともわかりません。
    もし可能であれば、2つの合成方法なども教えてもらえると大変助かります。ifの中をandで繋ぐという方法を他のどなたかがやられていたのでそれも参考にテストしてみましたが、やはり動きませんでした。
    大変お手数ですが、よろしくお願いします。

    • まめ子(管理人) より:

      送料無料条件を都道府県毎に変える場合は、使うフックは同じで多分OKです。組み立て方としては、以下のような感じでいけると思います。

      1. 商品合計金額を取得
      2. 配送先の都道府県を取得
      3. 都道府県が北海道または沖縄の場合且つ、商品合計金額が8,000円未満→送料の値に設定金額をセット(ifを使用)
      4. 送料を返す

      ローカルホストを立ち上げる余力がある時に、当方でも検証してみます(動作が確認出来たら記事にしたいと思います)。PHP、是非勉強なさってみて下さい!基礎本を一通りやるだけでも、Welcartのカスタマイズが思い通りに行く幅がかなり広がりますよ^^

      一方、フックが動かない原因はちょっとわからないです(私の環境→WordPress4.1.2+Welcart1.4.15では動きました)。ただ、同じフックを複数記述する時は、フックの第三引数(優先度:通常は10)をずらして、処理順位を明確にしたほうがいいかもです(片方を11にするとか・・・数字が低いほうが処理の優先順位が高くなります)。私はPHPに「精通している」というレベルではないため、お詳しい方のブログなどを是非ググってみて下さい^^;

  5. Muratada より:

    御丁寧にありがとうございます。
    本当に素人なのでうまくできるか不安ですが一度試してやってみます。
    また、報告させていただきます。

  6. Muratada より:

    お世話になります。
    フックが動かない原因解決しました。私は普段MacでDreamWeaverを使用しているのですが、動かないと言っていた「特定の都道府県で送料を加算する方法」は日本後を使用しますので、もしかしてエンコードがおかしいのでは!と思いあたり、テキストエディターでfunctions.phpを開き記載したところ、うまく動きました。お騒がせしました。考えている事も何とかなりそうです。ありがとうございました。

    • まめ子(管理人) より:

      エンコードが原因でしたか、それは盲点でした。カスタマイズもうまく行きそうで良かったですね!

Copyright© 2017 Welcart カスタマイズ ブログ All Rights Reserved.