Añadir el NIF a WooCommerce

Gracias a este Snippet se podrás añadir el NIF a WooCommerce en la página de pago. Además consigue otras funciones extra. También registrará el NIF en la ficha de cliente, en los pedidos y se visualizará en las facturas. También podrás editar el NIF de cualquier cliente posteriormente y actualizar sus facturas con el nuevo NIF.

Aquí os dejo el Snippet para añadir el NIF a WooCommerce

// Añade el campo NIF al formulario de pago
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) ){

	//Arreglamos la dirección predeterminada
	function agrega_campo_nif_formularios( $fields ) {
		
		$fields['nif'] = 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[ 'company' ][ 'class' ][0] = 'form-row-last';
		$fields[ 'company' ][ 'clear' ] = true;
		$fields[ 'city' ][ 'class' ][0] = 'form-row-first';
		$fields[ 'state' ][ 'class' ][0] = 'form-row-last update_totals_on_change';
		$fields[ 'postcode' ][ 'class' ][0] .= ' update_totals_on_change';
	
	    	//Ordena los campos del formulario
		$orderedFields = array();
		$orderedFields = array_slice( $fields, 0, 2, true );
	
		$orderedFields[ 'nif' ] = $fields['nif'];
		$orderedFields = array_merge( $orderedFields, array_slice( $fields, 2 ) );
	
		return $orderedFields;
	}
	add_filter('woocommerce_default_address_fields' , 'agrega_campo_nif_formularios');
	
	//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) {
		$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 ) {
	
		$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 ) {
		global $post;
	
		// Obtengo el NIF de la ficha de cliente si existe
		$order = new WC_Order( $post->ID ); 
	
		// Mantiene compatibilidad con versiones de WC < 3.0.0
		if ( version_compare( WC()->version, '3.0.0', '<' ) ) {
			
			$customer_nif = get_user_meta( $order->user_id, 'billing_nif', true);
		}else{
	
			$customer_nif = get_user_meta( $order->get_user_id(), 'billing_nif', true);
		}
	
		$fields['nif'] = array(
			'label' => __('NIF', 'woocommerce'),
			'show'  => true,
			'value' => isset( $customer_nif )? $customer_nif : false,
			);
	
	    	//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;
	}
}
Ver más tutoriales de: WooCommerce

Tutoriales relaccionados

¿Necesitas un desarrollo a medida?

Login para aceder

David Lanau Consultor de Marketing Online
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.