29
JULY
ウェブFRIDAY 2022 / 7 / 29
Welcartでカート画面から次の画面に遷移するのを防ぐ処理の書き方
Text by Hiroyuki Matsumoto
usces_filter_cart_check フックを使うことで対応できます。
まずはソースで引数を確認。
$this->error_message = apply_filters( 'usces_filter_cart_check', $this->error_message );
※フィルターの記述箇所:usceshop.class.php の customerinfoメソッド内
エラーメッセージを返すだけのフィルタ処理で、この値がemptyでない場合にはエラーとして扱い、カート遷移処理を中断します。
このフックを使って買い物袋だけを購入することはできないという処理を記述してみました。
/** * 買い物袋だけの購入をブロックする処理 */ add_filter('usces_filter_cart_check', function($mes){ $have_item = false; // 商品(レジ袋以外)を保持しているかのフラグ $kaimonobukuro = '買い物袋'; // 商品タイトルに含まれるキーワード global $usces; $cart = $usces->cart->get_cart(); foreach($cart as $item){ $post_id = $item['post_id']; $title = get_the_title($post_id); if(strpos($title, $kaimonobukuro) === false){ $have_item = true; } } if(! $have_item){ $mes .= "買い物袋だけのご購入はできません。"; } return $mes; });
※うっかり商品名ではなく投稿タイトルで判別するよう作ってしまっているので流用する際はご注意ください。
なお似たようなフックで、usces_filter_delivery_check という配送先と支払い方法を設定する画面から次の画面への遷移をブロックできるものがあります。
TEXT by
松本 博之(まつもとひろゆき)
1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。
WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の応用情報処理技術者をなんとなくとりました。