it-swarm-ja.com

プログラムで支払い方法を変更する

BACSとNo Payment requiredオプションの間の支払い方法の選択をプログラムで操作しようとしています。私のクライアントは見積もりの​​みを要求する機能を望んでいるので、私はwoocommerceのアクションとフィルタを拡張し、カートシステムを通して見積もりを要求する方法を提供しました。ユーザーが見積もりの​​みをリクエストした場合は、チェックアウトページで[代金引換のリクエスト - 支払い不要]に変更した[代金引換]オプションを自動選択します。どんなアドバイスでも役立つでしょう。

1
PipIWYG

Woocommerce_available_payment_gatewaysというフィルタがあります。

add_filter('woocommerce_available_payment_gateways','filter_gateways',1);
function filter_gateways($gateways){
    global $woocommerce;        
    //Remove a specific payment option
    unset($gateways['Paypal']);
    return $gateways
}

見積もり依頼オプションをどこでどのように取得/保存するかはわかりませんが、filter_gateways関数内の値にアクセスでき、条件付きロジックを使用して特定のゲートウェイを削除できます。

2
passatgt

ここでの私の問題は、要求が見積もり専用であることを示す値を格納するために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;
}

これは、価値を保持し、支払い領域がリロードされた後でも条件付きロジックを追加するためのトリックを行うようです。

0
PipIWYG