一般我们使用woocommerce制作的商城网站都是实物商品,但有时可能也会发布一些虚拟产品,比如教程资料等,用户付款后可以直接获得下载地址,这种情况下用户在支付时其实是不必填写收货地址。
所以我们可以想办法让woocommerce做一个判断,当购物车或账单中只有虚拟产品时移除收货相关的地段,这样可以简化用户的购物流程,提高结账效率。
具体方法就是下面这段代码,把它添加到当前网站主题的functions.php文件中即可,或者是添加到code snippet等代码片段插件中。
add_filter('woocommerce_checkout_fields', function ($fields)
{
$only_virtual = true;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
// Check if there are non-virtual products
if ( ! $cart_item[ 'data' ]->is_virtual()) {
$only_virtual = false;
}
}
if ($only_virtual) {
unset($fields[ 'billing' ][ 'billing_first_name' ]);
unset($fields[ 'billing' ][ 'billing_last_name' ]);
unset($fields[ 'billing' ][ 'billing_email' ]);
unset($fields[ 'billing' ][ 'billing_company' ]);
unset($fields[ 'billing' ][ 'billing_address_1' ]);
unset($fields[ 'billing' ][ 'billing_address_2' ]);
unset($fields[ 'billing' ][ 'billing_city' ]);
unset($fields[ 'billing' ][ 'billing_postcode' ]);
unset($fields[ 'billing' ][ 'billing_country' ]);
unset($fields[ 'billing' ][ 'billing_state' ]);
unset($fields[ 'billing' ][ 'billing_phone' ]);
add_filter('woocommerce_enable_order_notes_field', '__return_false');
}
return $fields;
});
这段代码会检查用户财物车中的产品,如果只有虚拟产品就会删除收货字段,结账时不用填写,直接付款就行;如果购物车中有实用产品,那就需要填写。