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

LOGIN
REGISTRO