Añadir el campo teléfono a la dirección de envío en WooCommerce

¿Por qué añadir el teléfono como obligatorio en la dirección de envío? Hoy en día, casi todas las compañías de envíos nos piden el teléfono del destinatario por si hay cualquier problema o no consiguen localizarlo en casa. Pero, como ya habréis comprobado, en WooCommerce no te viene por defecto el teléfono en la dirección de envío. Sí que te viene en la dirección de facturación, pero ¿que pasa si no es la misma? En este sencillísimo tutorial os vamos a explicar como añadir el teléfono en la dirección de envío como un campo obligatorio.

Simplemente tendréis que ir al archivo wp-content/themes/nombre-de-vuestra-plantilla/functions.php y añadir al final del archivo este código:


//Añadir el teléfono a la dirección de envío en el formulario de checkout
// Hook in
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Nuestra función - $fields se pasa por un filtro!
function custom_override_checkout_fields( $fields ) {
$fields['shipping']['shipping_phone'] = array(
'label' => __('Teléfono:', 'woocommerce'),
'placeholder' => _x('Teléfono', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);

return $fields;
}

/**
* OPCIONAL: Para que muestre un mensaje de error específico si no se rellena el teléfono en la dirección de envío*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
// Si no se ha rellenado, muestra el mensaje de error
if ( ! $_POST['shipping_phone'] )
wc_add_notice( __( 'El teléfono es necesario en la dirección de envío para las empresas de mensajería' ), 'error' );
}
/**
 * Para grabar el teléfono como metadato del pedido
 */
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['shipping_phone'] ) ) {
        update_post_meta( $order_id, 'telefono_envio', sanitize_text_field( $_POST['shipping_phone'] ) );
    }
}
// Para mostrarlo en el backoffice, en la ficha del pedido, en la dirección de envío
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Teléfono').':</strong> ' . get_post_meta( $order->id, 'telefono_envio', true ) . '</p>';
}