php - WooCommerce shipping fileds required state
one text
Solution:
/* only hide shipping section using css/jquery is not the solution. you must need to remove fields as per your requirement */
/* please Add the following code to your child theme functions.php file */
add_filter( 'woocommerce_checkout_fields', 'change_shipping_field_optional');
function change_shipping_field_optional( $fields ) {
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$shipping_pickup = $chosen_methods[0];
if ($shipping_pickup == 'local_pickup:4') // here your shipping rate ID
{
/* add fields here as per your requirement */
$fields['shipping_first_name']['required'] = false;
$fields['shipping_last_name']['required'] = false;
$fields['shipping_company']['required'] = false;
$fields['shipping_country']['required'] = false;
$fields['shipping_address_1']['required'] = false;
$fields['shipping_address_2']['required'] = false;
$fields['shipping_city']['required'] = false;
$fields['shipping_state']['required'] = false;
$fields['shipping_postcode']['required'] = false;
unset($fields['shipping']['shipping_first_name']);
unset($fields['shipping']['shipping_last_name']);
unset($fields['shipping']['shipping_company']);
unset($fields['shipping']['shipping_country']);
unset($fields['shipping']['shipping_address_1']);
unset($fields['shipping']['shipping_address_2']);
unset($fields['shipping']['shipping_city']);
unset($fields['shipping']['shipping_state']);
unset($fields['shipping']['shipping_postcode']);
}
return $fields;
}
Source