我想根据使用 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 应通过这种方式检查哪种付款方式?
您可以看到 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.
}
}
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');
}
}
}