在 PHP 中有条件地选择 Woocommerce 付款方式

问题描述 投票:0回答:2

我想根据使用 php (不是 jquery)的条件在 woocommerce 结帐页面中以编程方式设置默认付款方式(选中无线电)。

假设我有两种付款方式:

'pay_method1' and 'pay_method2'

大多数解决方案建议删除一种方法以选择其他方法:

unset($gateways['pay_method1']) //auto selects pay_method2 naturally

但我不想删除该方法。我只想在结帐页面加载/重新加载时设置默认值,因此用户仍然可以根据需要切换方法。

我计划在

functions.php
中采取以下行动:

add_action("woocommerce_before_checkout_form", "custom_before_checkout_action");
function custom_before_checkout_action() {

if ($my_condition) {
   //default to pay_method1 - how??
}
else {
   //default to pay_method2 - how??
}

}

这是否可以告诉 woocommerce 应通过这种方式检查哪种付款方式?

php jquery wordpress woocommerce
2个回答
2
投票

您可以看到 woocommerce 模板结构 checkout 文件夹中有文件 payment-method.php。有支付方式$gateway对象 具有属性 $gateway-> 选择访问真正的默认检查支付网关。

add_filter('woocommerce_available_payment_gateways', 'show_custom_payment_gateways');

    function show_custom_payment_gateways( $available_gateways){

      global $woocommerce;
      $available_gateways = $woocommerce->payment_gateways->get_available_payment_gateways();

      if( $myconditon ){
      $available_gateways['pay_method2']->chosen = true;
      $available_gateways['pay_method1']->chosen = false // default to false unchecked. 
    }

}


0
投票
add_action('woocommerce_checkout_process', 'custom_checkout_field_validation2');
function custom_checkout_field_validation2() {
    if($_POST['payment_method'] == "afterpay" || $_POST['payment_method'] == "wizit" || $_POST['payment_method'] == "ppec_paypal" || $_POST['payment_method'] == "klarna_payments_pay_later")
    {
        $_POST['payment_method']='';
        if ( isset($_POST['payment_method']) && ! empty($_POST['payment_method']) ) {
            wc_add_notice(__('Invalid payment method.'), 'error');
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.