WordPress教程

WooCommerce 购物车中只有虚拟商品时移除不必要的结账字段

阿里云

如果我们使用 WooCommerce 发布了一个虚拟产品——如付费下载资源,用户购买后,可以直接下载,不需要发送商品或账单给顾客,这个时候,结账页面的收件地址字段明显是多余的。

如果结账时, 顾客的订单中只有虚拟商品时,我们可以移除收货地址字段,减少要求用户填写的内容,以提高结账效率。实现这个需求的关键是判断购物车中只有虚拟商品。

也想出现在这里?联系我们
创客主机

我们可以遍历购物车中的商品来进行判断,只要有一个商品不是虚拟商品,移除收货地址字段这个条件就不成立,具体参考下面的代码。

  1. add_filter('woocommerce_checkout_fields', function ($fields)
  2. {
  3.  
  4.     $only_virtual = true;
  5.  
  6.     foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
  7.         // Check if there are non-virtual products
  8.         if ( ! $cart_item[ 'data' ]->is_virtual()) {
  9.             $only_virtual = false;
  10.         }
  11.     }
  12.  
  13.     if ($only_virtual) {
  14.         unset($fields[ 'billing' ][ 'billing_first_name' ]);
  15.         unset($fields[ 'billing' ][ 'billing_last_name' ]);
  16.         unset($fields[ 'billing' ][ 'billing_email' ]);
  17.         unset($fields[ 'billing' ][ 'billing_company' ]);
  18.         unset($fields[ 'billing' ][ 'billing_address_1' ]);
  19.         unset($fields[ 'billing' ][ 'billing_address_2' ]);
  20.         unset($fields[ 'billing' ][ 'billing_city' ]);
  21.         unset($fields[ 'billing' ][ 'billing_postcode' ]);
  22.         unset($fields[ 'billing' ][ 'billing_country' ]);
  23.         unset($fields[ 'billing' ][ 'billing_state' ]);
  24.         unset($fields[ 'billing' ][ 'billing_phone' ]);
  25.         add_filter('woocommerce_enable_order_notes_field', '__return_false');
  26.     }
  27.  
  28.     return $fields;
  29. });

WooCommerce 购物车中只有虚拟商品时移除不必要的结账字段

已有 414 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!