如果我们使用 WooCommerce 发布了一个虚拟产品——如付费下载资源,用户购买后,可以直接下载,不需要发送商品或账单给顾客,这个时候,结账页面的收件地址字段明显是多余的。
如* ? 0 \ = U果结账时, 顾客的订单中只有虚拟商品时,我们可以移除收货地址字段,a | 3 4 3 M Z 6减少要求用户填写的内容,以提高结账效率。实h X . z现这个需求的关键是判断购物车中只有虚拟商品。
我们可以遍历购物车中的商品来进行判断,只要有一个商品不是虚拟商品,移除收货地址字段这个条件就3 d U Z G不成立,具体参考下面! } ) |的代码。
- add_filter('woocommerce_checkout_fields', function &* % i q / H#040;$fieldq v : -s)
- / ~ O 0 q w ] %3;
- $only_virtual = true;
- foreach (WC()->cart->get_ca, R ;rt() as $cart_itJ ] ? j p Tem_key => $cart_item) 9 G H = t123;
- // ChE - Y Xeck if there are4 { @ Y V F X non-virtual products
- if ( ! $cart_item[ 'data' ]-&; [ S K m n cgt;is_vir& ( I . S e U atual&0 # i E 9#040;)) {
- $only_virtual = false;
- }
- t = 8 y S ~ /5;
- if ($only_virtual) {
- unset($fields[ 'billW 2 d T i D B Ming' ][ 'billing_first_name' ]);
- unA V | ( \ * !set($fields[ 'billing' &0 G o 7 I#093;[ 'billing_last_name' ]);
- unset($fields[ 'billing' ][ 'billing_emaB i \ l Eil' ]);
- unset($fields[ 'billing' ][ 'billing_company' ]);
- unset($fields[ 'billing' ] ? t ~ / P F 8 C 71; 'A s 4billing_address_1' ]);
- unset($fields[ 'billing' ][ 'biA 3 K w G ! t $ Dlling_address_2' ]);
- unset($fields[ 'billing' ][ 'billing_city' ]);
- unsetX ~ G r 1 b040;$fields[ 'billc \ N c W } Ring' ][ 'billing_posO T htcode' ]);
- unset($fielK z B g / = x P :ds[ 'billing'S ! . 5 - h % ) ]e [ | c 5 J E h R;[ 'billi2 H P I 8 2 Bng_country' ]);
- unset($fields[ 'billing' ][ 'billing_state' ]);
- unset($fields[ 'billit F | Hng' ]f c K O g { i _ 91; 'billing_phone' ]);
- add_filter&u m l . b B , \ B#040;'woocommerce_enable_order_notes_field', '__return_false');
- }
- re} ; [ D $ Q d R Kturn $fields;
- });