「一定金額以上で送料無料」は EC で最もよくあるキャンペーンの 1 つで、WooCommerce 標準の「送料無料」配送方法も最初から対応しています。最低注文金額を設定すれば、カートが条件を満たした時点でその方法が選べるようになります。WooCommerce がしないのは、顧客をそこへ自動で切り替えることです。
WooCommerce の動作にある隙間
カートが送料無料の条件を超える前(たとえば商品をもう 1 つ追加する前)に、顧客がすでに有料の配送方法を選んでいた場合、その有料の選択肢は選ばれたままになります。WooCommerce はそのセッションでまだ何も選ばれていないときにだけ既定の配送方法を選び、一度選ばれた方法は意図的な判断として扱って、あとから顧客にとって明らかに有利な選択肢が現れても変更しません。
1 つではなく 2 つの修正と、両方が必要だった理由
1 つ目のケースは、顧客が決済ページ上で自分でカートを変更する場合、たとえばページの数量ボタンで数量を増やす場合です。この特定の操作をブラウザ側で記録し、顧客が手動で別の配送方法を選んだ場合と区別したうえで、その記録がありかつ送料無料が今まさに選べるようになった場合にだけ、送料無料を自動で選択します。その後に顧客が手動で有料の方法をクリックした場合はそのままにします。記録が再び働くのは次に数量が変わったときだけで、再計算のたびではありません。
2 つ目のケースは、すでに条件を満たしたカートで初めて決済ページに来た顧客です。この場合は、サーバー側で woocommerce_package_rates に小さなフィルターをかけ、送料無料を既定の方法にします。ただし、そのセッションでまだ何も選ばれていない場合に限ります。すでに実際の選択があればフィルターは何もしないため、顧客自身の判断を黙って上書きすることは決してありません。
2 つの修正に共通する原則は、既定ではより良い選択肢を選ぶが、顧客が実際に選んだものには決して逆らわない、ということです。
ポイントのまとめ
- 配送方法を追加することは、それを既定にすることとは違います。WooCommerce は、セッションで選ばれた内容を意図的に保持します。
- ブラウザ側で「カートが変わったところ」と「顧客が配送方法をクリックしたところ」を区別することが、自動選択を煩わしいものではなく安全なものにします。
- サーバー側の既定値は、まだ行われていない選択にだけ適用すべきです。それを明示的に確認するのはわずかなコードですが、体験の悪化を確実に防げます。
関連記事:決済時に携帯電話番号を検証する、カスタム開発の実績。
ご自身の WooCommerce や WordPress の管理画面で同じような制約にお困りですか?ご相談ください。ArtinTech Solution はまさにこうしたストア向けのカスタムツールを開発しています。