質問: プログラムで支払い方法を変更する bacsとno payment requiredオプションの間の支払い方法の選択をプログラムで操作しようとしています。私のクライアントは見積もりのみを要求する機能を望んでいるので、私はwoocommerceのアクションとフィルタを拡張し、カートシステムを通して見積もりを要求する方法を提供しました。ユーザーが見積もりのみをリクエストした場合は、チェックアウトページで[代金引換のリクエスト - 支払い不要]に変更した[代金引換]オプションを自動選択します。どんなアドバイスでも役立つでしょう。
回答: ここでの私の問題は、要求が見積もり専用であることを示す値を格納するためにquery varsを使用することにありました。支払い領域は、チェックアウト領域内の変更に基づいて動的に更新されます。負荷がかかると、支払い方法が再ロードされ、クエリ変数の値が失われます。私はwc() - > session-> setとwc() - > session-> get関数を使うことによってこの問題を克服することができた。セッション値に基づいてレイアウトを操作するために、次の2つのアクションを追加しました。add_action("woocommerce_before_checkout_form", "custom_before_checkout_action"); function custom_before_checkout_action() { if (isset($_get["quote"]) && $_get["quote"] == "1") { echo '<h2>request for quote</h2>'; wc()->session->set("quote","true"); } else { wc()->session->set("quote","false"); echo '<h2>buy sample</h2>'; } } add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ if (wc()->session->get("quote") == "true") unset($gateways['bacs']); else unset($gateways['cod']); return $gateways; } これは、価値を保持し、支払い領域がリロードされた後でも条件付きロジックを追加するためのトリックを行うようです。