You can add a shipping phone field to WooCommerce checkout with the woocommerce_checkout_fields filter, giving couriers a direct contact number even when the billing phone belongs to someone else entirely.
Why a Separate Shipping Phone Field Matters
- Older WooCommerce versions only include a billing phone field, not a shipping one
- Gift orders and business deliveries often ship to someone other than the billing contact
- Couriers frequently need a direct number for delivery issues, not the account holder’s number
- One filter adds the field, validates the format, and stores it with the order
Check your checkout first: recent WooCommerce versions already include a Phone field in the shipping address. It follows the “Phone field” setting under Appearance > Customize > WooCommerce > Checkout (hidden, optional or required), and WooCommerce saves it with the order. The steps below are for stores on older versions.
Step 1: Register the Shipping Phone Field
/** Add a dedicated shipping phone field to WooCommerce checkout */
add_filter( 'woocommerce_checkout_fields', 'add_shipping_phone_checkout_field' );
function add_shipping_phone_checkout_field( $fields ) {
$fields['shipping']['shipping_phone'] = array(
'label' => 'Delivery Contact Phone',
'type' => 'tel',
'required' => false,
'class' => array( 'form-row-wide' ),
'validate' => array( 'phone' ),
'autocomplete' => 'tel',
'priority' => 25,
);
return $fields;
}Step 2: Show It on the Admin Order Screen
WooCommerce 5.6 and newer save shipping_phone with the shipping address and already show it on the admin order screen. You only need this step on older versions:
/** Display the shipping phone in the order admin, near the shipping address */
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_shipping_phone_in_admin' );
function display_shipping_phone_in_admin( $order ) {
$phone = $order->get_meta( '_shipping_phone' );
if ( $phone ) {
echo '<p><strong>Delivery Contact Phone:</strong> ' . esc_html( $phone ) . '</p>';
}
}Retrieving the Value Elsewhere
/** Fetch the shipping phone value from any order object */
$shipping_phone = $order->get_shipping_phone(); // WooCommerce 5.6+Troubleshooting
The field doesn’t appear on checkout
Confirm “Ship to a different address” is available and being used if you require shipping fields to display — some themes or settings hide the entire shipping section when billing and shipping addresses match.
The value doesn’t show on the order confirmation email
Custom checkout fields don’t automatically appear in emails — add a separate filter on the relevant email template if you want the shipping phone included there too.
Frequently Asked Questions
Is there a built-in getter for shipping phone like there is for billing phone?
Yes. Since WooCommerce 5.6, shipping_phone is part of the shipping address, so $order->get_shipping_phone() returns it.
Should this field be required?
That depends on your delivery process — set 'required' => true if couriers genuinely need it for every shipment.
Will this work with the block-based checkout?
The classic woocommerce_checkout_fields filter targets the shortcode checkout. The block-based checkout requires registering custom fields through the Checkout Blocks API instead.
Conclusion
A single filter is enough to add a shipping phone field to WooCommerce checkout, giving your fulfillment team a reliable delivery contact separate from the billing phone. Display it clearly on the admin order screen so anyone packing or shipping the order can find it quickly.
See also How to Add a Phone Input Mask to WooCommerce Checkout. Then read How to Add a Custom Checkout Field in WooCommerce.
Prefer no code? All-in-One Utilities Woo Add-on adds over 50 WooCommerce features, so you can switch them on without code.