フックの動作について
-
投稿者投稿
-
2014年4月18日 6:50 AM #69760kikuchi参加者
——————————————-
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円が追加されてしまいます。カートページを更新したり、商品を追加した場合は機能しています。どこを修正すれば良いのでしょうか?
よろしくお願いします2014年4月18日 11:21 AM #69761kitamuuu参加者if文の前に
global $usces; $total_items_price = $usces->get_total_price();
を追加し、商品合計金額を再取得してから条件分岐を行ってみてください。
ちなみにですが、そのフィルターへのフックは基本設定の送料無料条件金額を無視してしまうので、もし送料無料条件機能を利用するのであれば、’usces_filter_getShippingCharge’というフィルターにフックするといいですよ。
2014年4月18日 1:56 PM #69763kikuchi参加者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円が足されてしまいます。
コードの書き方に間違いがあるのでしょうか?よろしくお願いいたします。
2014年4月18日 2:08 PM #69764masuda-clair参加者勘違いかもしれませんが
せっかくUscesからデータを取ってきているのに
比較しているのは引数からの$entryになっているのが問題なのではないでしょうか?また、これは私が単に無知なだけかもしれませんが
引数を取得する関数を経由しないと、問題があるのではないでしょうか?私もつい今完成させたカスタマイズで、上記フックを利用しましたが
問題なく最新の内容をとってきていますが・・・2014年4月18日 3:12 PM #69765kitamuuu参加者masuda-clairさんが仰られているようにifの中の$entry[‘order’][‘total_items_price’]
は$total_items_priceに変更して下さい。$entryの中の合計金額は最新の表示の合計金額がはいっていないので、get_total_price()で
現在のカートの中の商品合計金額を計算しています。2014年4月18日 4:32 PM #69767kikuchi参加者皆様、アドバイスありがとうございます。
うまく動作させることが出来ました!
———————————————-
//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;
}
———————————————-
上記コードで思い通りに動きました。実は、運送会社に送料を値上げされ、このようなフックが必要になった次第です。
助かりました、本当にありがとうございました。 -
投稿者投稿
- このトピックに返信するにはログインが必要です。