在 Woocommerce 中隐藏基于产品元的支付方式

Hide payment method based on product meta in Woocommerce

我们在我们的 Woocommerce 电子商店中使用这个 WooCommerce Custom Fields 商业插件来对我们的产品进行个性化定制,我正在尝试找到一种方法来隐藏付款方式,如果密钥 'wccf' 在产品元。

我正在尝试升级下面的代码,我想替换发货国家/地区检查,但我不知道如何获取和检查 'wccf' 密钥。

function payment_gateway_disable_country( $available_gateways ){
    global $woocommerce;

    if (isset($available_gateways['cod']) && $woocommerce->customer->get_shipping_country() <> 'IT'){
        unset($available_gateways['cod']);
    }
    return $available_gateways;
}
add_filter('woocommerce_available_payment_gateways', 'payment_gateway_disable_country');

有人能帮帮我吗?

试试下面的代码。将代码放在 functions.php

function payment_gateway_disable_country($available_gateways){
    global $woocommerce;
    if (isset($available_gateways['cod']) && $woocommerce->customer->get_shipping_country() <> 'IT'){
        //fetching the cart
        $session_data = WC()->session->get('wccf');
        if(!empty($session_data)){
            unset($available_gateways['cod']);
        }   
    }
    return $available_gateways;
}
add_filter('woocommerce_available_payment_gateways', 'payment_gateway_disable_country');

假设产品在其元数据中有一个 wccf 条目,您的过滤器中的以下内容应该可以做到这一点。

function payment_gateway_disable_wccf($available_gateways){

    $cart = WC()->cart;

    if( $cart ){

        foreach($cart->get_cart() as $currItem){

            if( get_post_meta($currItem['product_id'], 'wccf', true) )
                unset($available_gateways['cod']);
        }
    }

    return $available_gateways;
}

add_filter('woocommerce_available_payment_gateways', 'payment_gateway_disable_wccf');

感谢大家的支持和帮助!最后,插件开发人员给我发了一个代码,解决了我的问题。

$cart = WC()->cart->get_cart();
$wccf_is_set = false;

foreach ($cart as $cart_item) {

if (isset($cart_item['wccf'])) {

    // mark that there's data set
    $wccf_is_set = true;
    }
}

if ($wccf_is_set === true) {
// do what you need if the data is set

}