Custom Fields o campos personalizados en Woocomerce, ejemplo CIF/NIF

 

////////18-7-2016—–NO FUNCIONA CON LA NUEVA VERSIÓN DE WOOCOMMERCE—– 18-7-2016/////////////

 

Como no hay manera de añadir el campo CIF/NIF en los datos de pedido de Woocomerce sólo nos quedan dos maneras de hacerlo.

-Pagar los 49 dólares para descargar el plugin woocommerce-checkout-field-editor o bien arriesgarnos a tocar código.

En mi caso me urge crear un campo personalizado CIF/NIF para poder generar después las facturas.

Pasos necesarios, (todo los códigos se añaden al archivo functions.php)

<?php
/**
 * Añadir el campo cuando se hace el pedido. Por defecto lo hará a continuación de los datos actuales
 **/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

    echo '<div id="my_custom_checkout_field"><h2>'.__('CIF/NIF').'</h2>';

    woocommerce_form_field( 'CIF/NIF', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'       => __('Introduzca el CIF/NIF'),
        ), $checkout->get_value( 'CIF/NIF' ));

    echo '</div>';

}

/**
 * Comprobación de que no se deja en blanco, omitir si es un campo opcional
 **/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    global $woocommerce;

    
    if (!$_POST['CIF/NIF'])
         $woocommerce->add_error( __('RELLENE EL CIF/NIF.') );
}

/**
 * Actualizar el campo personalizado en la base de datos
 **/
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 ($_POST['CIF/NIF']) update_post_meta( $order_id, 'CIF/NIF', esc_attr($_POST['CIF/NIF']));
}

/**
* Visualizarlo en la orden del pedido
**/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
 
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('CIF/NIF').':</strong> ' . $order->order_custom_fields['CIF/NIF'][0] . '</p>';
}?>

Con todo esto tendremos el campo CIF/NIF para introducir como campo obligatorio, y una vez se haga el pedido, al ir a la orden que se genera, lo tendremos como dato de facturación. Para poder modificarlo desde esta página, en la parte de abajo podremos modificarlo desde el desplegable de campo personalizado.

¿Que más faltaría? Quizás cambiar el lugar donde aparece el campo para rellenar, y que se enviase tambien por Email al cliente…pero eso ya es otra historia.