以编程方式更改WooCommerce的支付方式

时间:2014-03-20 作者:PipIWYG

我试图以编程方式在BACS和无需付款选项之间选择付款方式。我的客户只想请求报价,所以我扩展了woocommerce操作和过滤器,并提供了通过购物车系统请求报价的方法。如果用户仅请求报价,我将在结账页面上尝试自动选择货到付款选项,我已将其重命名为“仅请求报价-无需付款”。任何建议都会很有帮助。

2 个回复
最合适的回答,由SO网友:passatgt 整理而成

有一个名为woocommerce\\u available\\u payment\\u 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\\u gateways函数中的值,并且可以使用条件逻辑删除特定网关。

SO网友:PipIWYG

我这里的问题是使用查询变量存储一个值,以指示请求仅用于报价。付款区域根据签出区域内的更改动态刷新,加载时,重新加载付款方法,并丢失查询var值。通过使用WC()->session->set和WC()->session->get函数,我成功地解决了这个问题。我添加了以下两个操作来根据会话值操纵布局。

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;
}
这似乎是为了保留值,并在支付区域重新加载后添加条件逻辑。

结束

相关推荐