フックの動作について

フォーラム その他 フックの動作について

タグ: ,

  • このトピックには5件の返信、3人の参加者があり、最後にkikuchiにより10年前に更新されました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #69760
    kikuchi
    参加者

    ——————————————-
    WordPress のバージョン:3.8.2
    Welcart のバージョン:v1.3.13.1403071
    ご利用のテーマ:twentythirteenの子テーマ
    症状を確認したブラウザ:IE 11
    サーバー(会社名、サービス名):speever
    SSLの利用: 有り 独自
    WordPress のパーマリンク設定:デフォルト
    ——————————————–

    お世話になります。
    商品代金が2500円未満の場合、送料に150円を追加したいと思い
    ネットで調べ、下記のフックを記述してみました。
    ———————————————-
    //2500以下で送料150円プラス
    add_filter( ‘usces_filter_set_cart_fees_shipping_charge’, ‘my_filter_set_cart_fees_shipping_charge’, 10, 3);
    function my_filter_set_cart_fees_shipping_charge($shipping_charge, $carts, $entries){
    if($entries[‘order’][‘total_items_price’] <= 2500) {
    $shipping_charge += 150;
    }
    return $shipping_charge;
    }
    ———————————————-
    この状態で、3000円の商品をカートに入れ、そのまま精算した場合に150円が追加されてしまいます。カートページを更新したり、商品を追加した場合は機能しています。

    どこを修正すれば良いのでしょうか?
    よろしくお願いします

    #69761
    kitamuuu
    参加者

    if文の前に

    
    global $usces;
    $total_items_price = $usces->get_total_price();
    

    を追加し、商品合計金額を再取得してから条件分岐を行ってみてください。

    ちなみにですが、そのフィルターへのフックは基本設定の送料無料条件金額を無視してしまうので、もし送料無料条件機能を利用するのであれば、’usces_filter_getShippingCharge’というフィルターにフックするといいですよ。

    #69763
    kikuchi
    参加者

    kitamuuu様
    アドバイスありがとうございます。
    フックに
    global $usces;
    $total_items_price = $usces->get_total_price();
    を追加してみましたが変わりませんでした。
    ———————————————-
    //2500以下で送料150円プラス
    add_filter( ‘usces_filter_getShippingCharge’, ‘my_filter_getShippingCharge’, 10, 3);
    function my_filter_getShippingCharge($charge, $cart, $entry){
    global $usces;
    $total_items_price = $usces->get_total_price();
    if ($entry[‘order’][‘total_items_price’] <= 2500) {
    $charge += 150;
    }
    return $charge;
    }
    ———————————————-
    も試してみましたが同じ結果でした。
    やはり直ぐに精算に行くと150円が足されてしまいます。
    コードの書き方に間違いがあるのでしょうか?

    よろしくお願いいたします。

    #69764
    masuda-clair
    参加者

    勘違いかもしれませんが
    せっかくUscesからデータを取ってきているのに
    比較しているのは引数からの$entryになっているのが問題なのではないでしょうか?

    また、これは私が単に無知なだけかもしれませんが
    引数を取得する関数を経由しないと、問題があるのではないでしょうか?

    私もつい今完成させたカスタマイズで、上記フックを利用しましたが
    問題なく最新の内容をとってきていますが・・・

    #69765
    kitamuuu
    参加者

    masuda-clairさんが仰られているようにifの中の$entry[‘order’][‘total_items_price’]
    は$total_items_priceに変更して下さい。

    $entryの中の合計金額は最新の表示の合計金額がはいっていないので、get_total_price()で
    現在のカートの中の商品合計金額を計算しています。

    #69767
    kikuchi
    参加者

    皆様、アドバイスありがとうございます。
    うまく動作させることが出来ました!
    ———————————————-
    //2500以下で送料150円プラス
    add_filter( ‘usces_filter_getShippingCharge’, ‘my_filter_getShippingCharge’, 10, 3);
    function my_filter_getShippingCharge($charge, $cart, $entry){
    global $usces;
    $total_items_price = $usces->get_total_price();
    if ($total_items_price <= 2500) {
    $charge += 150;
    }
    return $charge;
    }
    ———————————————-
    上記コードで思い通りに動きました。

    実は、運送会社に送料を値上げされ、このようなフックが必要になった次第です。
    助かりました、本当にありがとうございました。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • このトピックに返信するにはログインが必要です。