php 为特定用户禁用Woocommerce支付网关

hgc7kmma  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(106)

我们需要为许多客户提供特定的付款方式。他们已经被分配到不同的用户角色,但我们希望他们在结账时看到的付款方式更加具体。
这就是我们所需要的
| 零售商|付款方式|
| - ------|- ------|
| A使用者|直接转账|
| B使用者|直接转账|
| C使用者|货到付款或直接转账|
| 销售团队|付款方式|
| - ------|- ------|
| A使用者|直接转账、信用卡、现金|
| B使用者|直接转账|
| C使用者|信用卡|
| D使用者|现金|
| 常客|付款方式|
| - ------|- ------|
| A使用者|现金|
| B使用者|直接转账、信用卡|
| C使用者|信用卡|
| D使用者|现金、直接转账|
我见过很多基于用户角色的支付方法的插件和代码片段,但找不到任何特定用户的东西,所以我对这个感到困惑。
我找到的用户角色代码片段之一是:

// Disable Woocommerce payment gateways for specific user roles
add_filter('woocommerce_available_payment_gateways', 'wpsh_hide_payment_roles', 1);
  function wpsh_hide_payment_roles($gateways)
  {
      $current_user = wp_get_current_user();
      $role = $current_user->roles;
      global $woocommerce;
      // Here goes your user role
      if ($role[0] == 'customer') {
          
        // Add payment gateways you need to disable. In this example only BACS is activated
        unset($gateways['cheque']); // Cheque
        unset($gateways['cod']); // Cash on delivery
        unset($gateways['paypal']); // Paypal
    //  unset($gateways['bacs']); // Direct bank transfer (BACS)
      }
      return $gateways;
  }
xxls0lw8

xxls0lw81#

您找到的代码片段几乎可以正常工作,您不必检查角色,而是必须检查user_id,如下所示:

// Disable Woocommerce payment gateways for specific user roles
add_filter('woocommerce_available_payment_gateways', 'wpsh_hide_payment_roles', 1);
  function wpsh_hide_payment_roles($gateways)
  {
      $current_user = wp_get_current_user();

      global $woocommerce;
      // Here goes your user id
      if ($current_user->ID == 10) {
          
        // Add payment gateways you need to disable. In this example only BACS is activated
        unset($gateways['cheque']); // Cheque
        unset($gateways['cod']); // Cash on delivery
        unset($gateways['paypal']); // Paypal
    //  unset($gateways['bacs']); // Direct bank transfer (BACS)
      }else if($current_user->ID == 11){

        //unset($gateways['cheque']); // Cheque
        unset($gateways['cod']); // Cash on delivery
        unset($gateways['paypal']); // Paypal
       unset($gateways['bacs']); // Direct bank transfer (BACS)
      }
      return $gateways;
  }

此方法的缺点是需要为每个客户添加单独的代码块。虽然这对于少数客户来说可能是可管理的,但随着客户数量的增加,代码将变得越来越冗长和难以维护。
一个更有效的解决方案是创建一个插件,让管理员可以轻松配置支付方式。这个插件将提供一个用户友好的界面,用于设置和管理不同的支付选项,并可以与各种支付网关集成。
我可以为你建立这样的插件,随时联系我使用我的个人资料页面上提供的联系信息。

相关问题