Search code examples
phpwordpresswoocommercecheckoutaccount

Remove phone from billing/shipping fields everywhere in Woocommerce?


I don't need to collect customer phone numbers in woocommerce so I've used the following code to remove them from the checkout process:

add_filter( 'woocommerce_checkout_fields', 'pbj_woocommerce_checkout_fields' );
function pbj_woocommerce_checkout_fields( $fields ) {
  unset($fields['billing']['billing_phone']);
  unset($fields['shipping']['shipping_phone']);
$fields['billing']['billing_email']['class'] = array('form-row-wide');
return $fields;}

(sorry for hideous code pasting, first time!)

That works great on the checkout page but once in the "my account" area, the user is still required to add a phone number if they edit their billing or shipping address. I have added this code:

function pbj_remove_billingphone($fields) {
unset( $fields ['billing_phone'] );
return $fields;}
add_filter( 'woocommerce_billing_fields', 'pbj_remove_billingphone' );

which has removed it from billing, but I can't get anything to work to remove it from shipping. Any help on either something that universally removes the phone number requirement everywhere, or tips on what to filter/unset to remove the shipping phone number on the account page? Thank you!


Solution

  • Here is the complete way to do it in account and checkout pages (for both pages):

    // Remove billing phone (and set email field class to wide)
    add_filter( 'woocommerce_billing_fields', 'remove_billing_phone_field', 20, 1 );
    function remove_billing_phone_field($fields) {
        $fields ['billing_phone']['required'] = false; // To be sure "NOT required"
    
        $fields['billing_email']['class'] = array('form-row-wide'); // Make the field wide
    
        unset( $fields ['billing_phone'] ); // Remove billing phone field
        return $fields;
    }
    
    // Remove shipping phone (optional)
    add_filter( 'woocommerce_shipping_fields', 'remove_shipping_phone_field', 20, 1 );
    function remove_shipping_phone_field($fields) {
        $fields ['shipping_phone']['required'] = false; // To be sure "NOT required"
    
        unset( $fields ['shipping_phone'] ); // Remove shipping phone field
        return $fields;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works

    Normally shipping email and phone fields doesn't exist by default in WooCommmerce