这是我的答案,它工作得很好。
function conditionally_remove_checkout_fields( $fields ) {
// HERE the defined product Categories
$categories = array(\'age-defying-skincare\',\'az-brand-accessories\',\'az-healthy-supplements\',\'az-other-natural-products\',\'Not available mwb_wgm_giftcard\',\'little-geniuses-children\');
$found = false;
// CHECK CART ITEMS: search for items from our defined product category
foreach ( WC()->cart->get_cart() as $cart_item ){
if( has_term( $categories, \'product_cat\', $cart_item[\'product_id\'] ) ) {
$found = true;
break;
}
}
// If a special category is in the cart, remove some shipping fields
if ( $found ) {
// hide the billing fields
unset($fields[\'account\'][\'account_password\']);
unset($fields[\'account\'][\'account_password-2\']);
unset($fields[\'account\'][\'account_username\']);
return $fields;
// hide the additional information section
add_filter(\'woocommerce_enable_order_notes_field\', \'__return_false\');
add_filter( \'woocommerce_ship_to_different_address_checked\', \'__return_false\' );
}
return $fields;
}