【问题标题】:Hide payment method based on product meta in Woocommerce在 Woocommerce 中隐藏基于产品元的付款方式
【发布时间】:2017-10-05 10:45:13
【问题描述】:

我们在我们的 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');

有人可以帮帮我吗?

【问题讨论】:

  • item meta = product meta 我说对了吗?
  • 我的意思是this(来自插件的文档)
  • 好心,但是这个插件是一个真正的噩梦(对于 Woocommerce,很多人都遇到了未解决的问题,在 StackOverFlow 中)......相反,您最好使用Advanced Custom Fields 免费且文档齐全的插件或最好的方法是使用自定义代码制作自己的自定义字段。 回答者无法猜测如何使用您的实际插件获取数据……
  • 感谢您的提示,LoicTheAztec!我们可以试试。

标签: php wordpress plugins woocommerce payment-gateway


【解决方案1】:

试试下面的代码。将代码放在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');

【讨论】:

  • 感谢您的帮助!不幸的是,它并没有解决我的问题 :( 尽管我添加了自定义项,但我仍然可以在支付方式中看到 COD。这是我刚才得到的插件开发人员的建议“你只需要迭代你所有的购物车项目,检查是否有 ['wccf'] 键集,如果是 - 删除运输方式。”
【解决方案2】:

假设产品在其元数据中有一个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');

【讨论】:

  • 感谢您的帮助!不幸的是,我仍然可以在付款方式中看到 COD,因此此代码不起作用。如果我添加自定义,它将添加类似this 的内容。我有另一个想法。是否可以检查购物车页面上是否有单词 Gravírovat
【解决方案3】:

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

$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

}

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 2020-03-28
    • 2013-06-05
    • 2018-11-09
    • 2021-12-15
    • 2012-08-02
    • 1970-01-01
    • 2015-11-05
    • 2016-04-13
    相关资源
    最近更新 更多