如果我們使用WooCommerce發(fā)布了一個虛擬產(chǎn)品——如付費下載資源,用戶購買后,可以直接下載,不需要發(fā)送商品或賬單給顧客,這個時候,結(jié)賬頁面的收件地址字段明顯是多余的。
如果結(jié)賬時, 顧客的訂單中只有虛擬商品時,我們可以移除收貨地址字段,減少要求用戶填寫的內(nèi)容,以提高結(jié)賬效率。實現(xiàn)這個需求的關鍵是判斷購物車中只有虛擬商品。
我們可以遍歷購物車中的商品來進行判斷,只要有一個商品不是虛擬商品,移除收貨地址字段這個條件就不成立,具體參考下面的代碼。
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;
});


