【问题标题】:Hide payment methods in Woocommerce, according to selected currency根据所选货币隐藏 Woocommerce 中的付款方式
【发布时间】:2016-04-13 02:27:31
【问题描述】:

在结帐页面上,我们有一个用于美元、欧元、印度卢比、英镑货币的货币切换器。

但是,在 3 个网关中,只有 1 个网关支持所有货币,2 个支持 INR。

所以,如果有人选择美元、欧元和英镑,我需要隐藏其他两个网关

我们可以使用selected currency & 做需要的功能吗?

TIA

【问题讨论】:

    标签: wordpress woocommerce payment-gateway


    【解决方案1】:

    如果购物车中有特定产品,我会使用它来删除网关:

    add_filter('woocommerce_available_payment_gateways','filter_gateways',1);
    function filter_gateways($gateways){
      global $woocommerce;
      foreach ($woocommerce->cart->cart_contents as $key => $values ) {
      $product_ = array(1063);
      if(in_array($values['product_id'],$product_)){
       unset($gateways['paypal']);
       break;
     }}
     return $gateways;
    }
    

    我不知道你的货币切换器是什么来获取任何变量来修改 woocommerce_available_payment_gateways 过滤器。

    【讨论】:

    • 此方法仅在我们在页面加载之前知道有关购物车/产品的详细信息时才有效。货币将由用户在前端选择,因此网关选项需要在前端更新,然后在结帐时验证。
    • 很好,史莱克。实际上,我在结帐页面上使用了WooCommerce Currency Switcher(为了避免与缓存相关的多个问题,这个设置为no-cache。它可能使用shop_currency 方法,但不确定如何确定设置了哪种货币!有什么线索吗?
    【解决方案2】:

    好的。找到了解决办法。如果有人在这里绊倒,请在下面提供详细信息。

    “WooCommerce Currency Switcher”插件使用会话/瞬态方法更改 shop currency 和商店。不仅如此,它还为每种选定的货币添加了一个主体类。

    例如: currency-usd 或 currency-eur 或 currency-gbp

    这就是简单地使用 CSS 就可以做到的事情

    .currency-usd .payment_method_instamojo, .currency-usd .payment_method_paynimo, .currency-eur .payment_method_instamojo, .currency-eur .payment_method_paynimo, .currency-gbp .payment_method_instamojo, .currency-gbp .payment_method_paynimo {display:none}

    无需编写单独的函数即可按预期工作。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      这是工作代码,我已在 [www.edupediapublications.org][1]

      上实现它

      add_filter('woocommerce_available_payment_gateways', 'woocs_filter_gateways', 1);
       
      function woocs_filter_gateways($gateway_list)
      {
          global $WOOCS;
          $exclude = array(
              'paypal' => array('EUR', 'GBP'), //do not show paypal gate if current currency is EUR or GBP
              'stripe' => array('USD')//do not show stripe gate if current currency is USD
          );
          //***
          foreach ($exclude as $gateway_key => $currencies)
          {
              if (isset($gateway_list[$gateway_key]) AND in_array($WOOCS->current_currency, $currencies))
              {
                  unset($gateway_list[$gateway_key]);
              }
          }
       
          return $gateway_list;
      }

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2019-07-22
        • 2019-01-16
        • 1970-01-01
        • 2018-11-09
        相关资源
        最近更新 更多