Descargas ilimitadas y Licencias Originales

Suscríbete o Inicia Sesión y descarga todos los recursos que quieras sin coste adicional. Todos los Plugins y Themes de WordPress en un clic. Además podrás acceder a Licencias Originales y API Keys.

Agrega el NIF a la página de pago e inclúyelo en los datos de facturación de tus clientes

Este código incorpora un nuevo campo para el NIF en la página de pago de tu tienda. Sin embargo, su funcionalidad va más allá. Además de mostrar el NIF en la página de pago, también lo registra en la ficha del cliente, en los detalles de los pedidos y lo presenta en las facturas correspondientes.

Adicionalmente, tendrás la capacidad de editar el NIF de cualquier cliente en caso de necesidad futura y actualizar sus facturas con la nueva información.

/** ###################################################################### 
 * Añade el campo NIF al formulario de pago y lo guarda en los datos del pedido
 * ######################################################################
*/
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) ){

    // Añade el campo NIF al formulario de datos de facturación del checkout
    add_filter("woocommerce_checkout_fields", function($fields){
        error_log(print_r($fields, true));

        $nifField = array(
            'label' => __('<abbr lang="es" title="Número de Identificación Fiscal">NIF</abbr>', 'woocommerce'),
            'placeholder' => _x('Ej: 99999999E', 'placeholder', 'woocommerce'),
            'required' => false,
            'class' => array('form-row-first'),
            );
    
            //Asigna nuevas clases de estilo a algunos campos del formulario
        $fields[ 'billing' ][ 'billing_company' ][ 'class' ][0] = 'form-row-last';
        $fields[ 'billing' ][ 'billing_company' ][ 'clear' ] = true;
        $fields[ 'billing' ][ 'billing_city' ][ 'class' ][0] = 'form-row-first';
        $fields[ 'billing' ][ 'billing_state' ][ 'class' ][0] = 'form-row-last update_totals_on_change';
        $fields[ 'billing' ][ 'billing_postcode' ][ 'class' ][0] .= ' update_totals_on_change';
    
        //Ordena los campos del formulario
        $orderedFields = array();
        $orderedFields = array_slice( $fields[ 'billing' ], 0, 2, true );
    
        $orderedFields[ 'billing_nif' ] = $nifField;
        $orderedFields = array_merge( $orderedFields, array_slice( $fields[ 'billing' ], 2 ) );

        $fields[ 'billing' ] = $orderedFields;

        return $fields;
    });
    
    //Nueva función para hacer compatible el código con WooCommerce 2.1
    function obtener_campo_personalizado( $field, $order) {
        $value = get_post_meta( $order, $field, false );
        
        if ( isset( $value[0] ) ) return $value[0];
        
        return NULL;
    }
    
    //Añade el NIF a la dirección de facturación y envío
    add_filter('woocommerce_order_formatted_billing_address','agrega_campo_nif_direccion_facturacion', 1, 2);
    function agrega_campo_nif_direccion_facturacion($fields, $order) {
    
        // Mantiene compatibilidad con versiones de WC < 3.0.0
        if ( version_compare( WC()->version, '3.0.0', '<' ) ) {
    
            $fields['nif'] = obtener_campo_personalizado('_billing_nif', $order->id);
        }else{
    
            $fields['nif'] = obtener_campo_personalizado('_billing_nif', $order->get_id());
        }
        
        return $fields;
    }
    
    add_filter('woocommerce_order_formatted_shipping_address','agrega_campo_nif_direccion_envio', 1, 2); 
    function agrega_campo_nif_direccion_envio($fields, $order) {
    
        // Mantiene compatibilidad con versiones de WC < 3.0.0
        if ( version_compare( WC()->version, '3.0.0', '<' ) ) {
    
            $fields['nif'] = obtener_campo_personalizado('_shipping_nif', $order->id);
        }else{
    
            $fields['nif'] = obtener_campo_personalizado('_shipping_nif', $order->get_id());
        }
        
        return $fields;
    }
    
    add_filter('woocommerce_formatted_address_replacements','formato_direccion_de_facturacion', 1, 2); 
    function formato_direccion_de_facturacion($fields, $argumentos) {

        if ( isset( $argumentos['nif'] ) ) {

            $fields['{nif}'] = $argumentos['nif'];
            $fields['{nif_upper}'] = strtoupper($argumentos['nif']);
        }
        
        return $fields;
    }
    
    //Reordena los campos de la dirección predeterminada
    add_filter('woocommerce_localisation_address_formats','formato_direccion_localizacion' );
    function formato_direccion_localizacion( $fields ) {

        // No hace nada si está en el carrito de compra
        if ( is_cart() ) return $fields;

        $new_fields = $fields;
    
        foreach ( $fields as $country => $format ) {
    
            $new_fields[ $country ] = str_replace( "{company}" , "{company}\n{nif}", $format );
        }
    
        return $new_fields;
    }
    
    //Añade el campo CIF/NIF a usuarios
    add_filter('woocommerce_customer_meta_fields', 'agrega_campos_administracion_usuarios');
    function agrega_campos_administracion_usuarios($fields) {
        $orderedFields = array();
    
        $fields['billing']['fields']['billing_nif'] = array(
            'label' => __( 'NIF', 'woocommerce' ),
            'description' => ''
            );
        
            //Ordena los campos en el perfil del cliente 
        $orderedFields[ 'billing' ][ 'title' ] = $fields['billing']['title'];
    
        $orderedFields[ 'billing' ][ 'fields' ] = array_slice( $fields['billing']['fields'], 0, 3, true );
        $orderedFields['billing']['fields']['billing_nif'] = $fields['billing']['fields']['billing_nif'];
        $orderedFields[ 'billing' ][ 'fields' ] = array_merge( $orderedFields[ 'billing' ][ 'fields' ], array_slice( $fields[ 'billing' ][ 'fields' ], 3 ) );
        $orderedFields[ 'shipping' ] = $fields['shipping'];
        
        return $orderedFields;
    }
    
    //Añadimos el NIF a la dirección de facturación y envío
    add_filter('woocommerce_user_column_billing_address','agrega_campo_nif_usuario_direccion_facturacion', 1, 2);
    function agrega_campo_nif_usuario_direccion_facturacion($fields, $user) {
        $fields['nif'] = get_user_meta($user, 'billing_nif', true);
        
        return $fields;
    }
    
    //Añade el campo NIF a Editar mi dirección
    add_filter('woocommerce_my_account_my_address_formatted_address', 'agrega_campo_nif_editar_direccion', 10, 3);
    function agrega_campo_nif_editar_direccion($fields, $user, $name) {
        $fields['nif'] = get_user_meta($user, $name . '_nif', true);
        
        //Ordena los campos
        $fields_nuevos['first_name'] = $fields['first_name'];
        $fields_nuevos['last_name'] = $fields['last_name'];
        $fields_nuevos['company'] = $fields['company'];
        $fields_nuevos['nif'] = $fields['nif'];
        $fields_nuevos['address_1'] = $fields['address_1'];
        $fields_nuevos['address_2'] = $fields['address_2'];
        $fields_nuevos['postcode'] = $fields['postcode'];
        $fields_nuevos['city'] = $fields['city'];
        $fields_nuevos['state'] = $fields['state'];
        $fields_nuevos['country'] = $fields['country'];
        
        return $fields_nuevos;
    }
    
    //Añade el campo NIF a Detalles del pedido
    add_filter('woocommerce_admin_billing_fields', 'agrega_campo_nif_editar_direccion_pedido');
    add_filter('woocommerce_admin_shipping_fields', 'agrega_campo_nif_editar_direccion_pedido');
    function agrega_campo_nif_editar_direccion_pedido( $fields ) {
    
        $fields['nif'] = array(
            'label' => __('NIF', 'woocommerce')
        );
    
        //Ordena los campos
        $fields_nuevos['first_name'] = $fields['first_name'];
        $fields_nuevos['last_name'] = $fields['last_name'];
        $fields_nuevos['company'] = $fields['company'];
        $fields_nuevos['nif'] = $fields['nif'];
        $fields_nuevos['address_1'] = $fields['address_1'];
        $fields_nuevos['address_2'] = $fields['address_2'];
        $fields_nuevos['postcode'] = $fields['postcode'];
        $fields_nuevos['city'] = $fields['city'];
        $fields_nuevos['state'] = $fields['state'];
        $fields_nuevos['country'] = $fields['country'];
    
        if ( !empty( $fields['email'] ) ) {
    
            $fields_nuevos['email'] = $fields['email'];
        }
    
        if ( !empty( $fields['phone'] ) ) {
    
            $fields_nuevos['phone'] = $fields['phone'];
        }
    
        return $fields_nuevos;
    }
    
    add_filter( 'woocommerce_found_customer_details', 'carga_el_nif_en_datos_cliente_crear_nuevo_pedido', 10, 3 );
    function carga_el_nif_en_datos_cliente_crear_nuevo_pedido( $customer_data, $user_id, $type_to_load ){
    
        $customer_data[ $type_to_load . '_nif' ] = get_user_meta( $user_id, $type_to_load . '_nif', true );
    
        return $customer_data;
    }
}

 

Productos destacados