在WooCommerce中,我有一个特定产品,由于法律原因无法在线支付,但可以通过COD订购。
我已经编写了一个自定义附加功能,以便在特定产品在购物车中时隐藏付款表单(Inspire Commerce信用卡付款)。
当我回显$available_gateways
时,我在数组中看到两个选项,'cod'和'inspire' - 但是当我用我的代码隐藏Inspire
时,两个网关都会消失,我得到了这个错误讯息:
很抱歉,似乎没有可用的付款方式 州。如果您需要帮助或希望制作,请与我们联系 替代安排。
为什么我不能只拥有COD?
这是我的功能代码:
function dfg_hide_payment_form($available_gateways) {
if ($_customer['dfg-pay-later-enabled'] == 1) {
if( is_checkout() ) {
global $woocommerce, $_customer;
$packages = $_customer['dfg-package-ids'];
foreach ($packages as $package) {
if (gs_woo_in_cart($package)) {
unset($available_gateways['inspire']);
}
}
}
} else {
unset($available_gateways['cod']);
}
}
add_filter('woocommerce_available_payment_gateways', 'dfg_hide_payment_form', 1);
由于
答案 0 :(得分:2)
我在本回答中使用了购物车迭代方式,以检查您的特定产品是否在购物车中。如果产品在购物车中,我就会设置好“激发灵感”。支付网关 (替换错误的变量名称) 。
以下是此代码:
add_filter('woocommerce_available_payment_gateways', 'conditional_hiding_payment_gateway', 1, 1);
function conditional_hiding_payment_gateway($available_gateways) {
global $_customer;
if ($_customer['dfg-pay-later-enabled'] == 1) {
// HERE set your specific product ID
$specific_product = 295;
$is_in_cart = false;
// Iterating through each items in cart
foreach(WC()->cart->get_cart() as $cart_item){
if($cart_item['product_id'] == $specific_product){
$is_in_cart = true;
break;
}
}
if($is_in_cart)
unset($available_gateways['inspire']);
} else {
unset($available_gateways['cod']);
}
return $available_gateways;
}
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
此代码未经测试,但应该有效...
答案 1 :(得分:0)
我在函数结束时错过了一个return语句。
return $available_gateways;