Here is my answer and it’s working perfectly.
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;
}