Aggiungere P.Iva e Codice Fiscale a Woocommerce di WordPress

Se hai un e-commerce o programmi di aprirne uno con il famigerato plugin WooCommerce di WordPress è probabile che ti serva qualche campo di registrazione in più di quelli di default.

Nello specifico, in questo articolo, aggiungeremo i campi Partita Iva e Codice Fiscale come campi dell’ “indirizzo di fatturazione” nell’area utente del profilo e nella fase di checkout di un acquisto. Ovviamente, questi dati saranno modificabili da ogni pagina dove vengono visualizzati i campi di testo, quindi, ovunque ci sia un form che li richiede. Inoltre, questi campi appariranno anche nell’area di amministrazione, visibili e modificabili dagli amministratori.

Come aggiungere i campi Partita Iva e Codice Fiscale a WooCommerce

Vediamo un po’ di codice! Innanzitutto, per poter modificare questi campi devi aver accesso al file functions del tema che vuoi modificare. Se hai l’accesso, possiamo continuare! 

Per aggiungere i campi P. IVA e C.F. a WooCommerce devi aggiungere delle porzioni di codice al file functions del tema, cioè: “/www.miosito.it/wp-content/themes/miotema/functions.php”.

Qui sotto ti abbiamo fornito un codice che è piuttosto semplice e commentato. In buona sostanza, ti basterà copiare e incollare questo codice nel tuo file functions del tema e avrai aggiunto in pochi copia/incolla entrambi i campi per Codice Fiscale e Partita Iva su WooCommerce.

That’s all folks!


<?php

    /*    Imposto i due nuovi campi custom e li mostro nell'area personale dell'utente (billing address)
    */
    function xyz123_set_customer_billing_fields_in_profile( $fields )
    {
        $fields['billing_vat'] = array(
            'label' =>  __('VAT Number', 'woocommerce' ),
            'placeholder' => '',
            'required' => false,
            'clear' => false,
            'type' => 'text',
            'class' => array('form-row-wide')
        );

        $fields['billing_nin'] = array(
            'label' =>  __('NIN Code', 'woocommerce' ),
            'placeholder' => '',
            'required' => false,
            'clear' => false,
            'type' => 'text',
            'class' => array('form-row-wide')
        );

        return $fields;
    }
    add_filter('woocommerce_billing_fields', 'xyz123_set_customer_billing_fields_in_profile');


    /*    Mostro i campi custom nella pagina di checkout
    */
    function xyz123_set_customer_billing_fields_in_checkout( $fields )
    {
        $fields['billing']['billing_vat'] = array(
            'label' =>  __('VAT Number', 'woocommerce' ),
            'placeholder' => '',
            'required' => false,
            'clear' => false,
            'type' => 'text',
            'class' => array('form-row-wide')
        );

        $fields['billing']['billing_nin'] = array(
            'label' =>  __('NIN Code', 'woocommerce' ),
            'placeholder' => '',
            'required' => false,
            'clear' => false,
            'type' => 'text',
            'class' => array('form-row-wide')
        );

        return $fields;
    }
    add_filter('woocommerce_checkout_fields', 'xyz123_set_customer_billing_fields_in_checkout');


    /*    Mostro i campi custom nel profilo dell'utente lato amministrazione
    */
    function xyz123_set_customer_billing_fields_in_customer_profile_admin_side( $fields )
    {
        $fields['billing']['fields']['billing_vat'] = array(
            'label' => __( 'VAT Number', 'woocommerce' ),
            'description'  => ''
        );

        $fields['billing']['fields']['billing_nin'] = array(
            'label' => __( 'NIN Code', 'woocommerce' ),
            'description'  => ''
        );

        return $fields;
    }
    add_filter( 'woocommerce_customer_meta_fields', 'xyz123_set_customer_billing_fields_in_customer_profile_admin_side' );


    /*    Compilo con i dati del profilo (billing address) i campi custom nel checkout
    */
    function xyz123_populate_customer_billing_fields_in_checkout( $input, $key )
    {
    	global $current_user;

        if ( $key == 'billing_vat' )
            return get_user_meta( $current_user->ID, 'billing_vat', true );

        if ( $key == 'billing_nin' )
            return get_user_meta( $current_user->ID, 'billing_nin', true );
    }
    add_filter('woocommerce_checkout_get_value', 'xyz123_populate_customer_billing_fields_in_checkout', 10, 2 );


    /*    Salvo le modifiche sui campi custom effettuate dall'area personale dell'utente (billing address)
    */
    function xyz123_store_customer_billing_fields_in_address( $user_id )
    {
        if ( ! empty( $_POST['billing_vat'] ) )
            update_user_meta( $user_id, 'billing_vat', sanitize_text_field( $_POST[ 'billing_vat' ] ) );

        if ( ! empty( $_POST['billing_nin'] ) )
            update_user_meta( $user_id, 'billing_nin', sanitize_text_field( $_POST[ 'billing_nin' ] ) );

        if ( empty( $_POST[ 'billing_nin' ] ) && empty( $_POST[ 'billing_vat' ] ) )
            wc_add_notice( __( 'You must insert a NIN Code or Vat Code.' ), 'error' );
    }
    add_action( 'woocommerce_customer_save_address', 'xyz123_store_customer_billing_fields_in_address' );


    /*    Salvo le modifiche sui campi custom effettuate nel checkout dell'utente
    */
    function xyz123_store_customer_billing_fields_in_checkout( $user_id )
    {
        if ( ! empty( $_POST['billing_vat'] ) )
            update_user_meta( $user_id, 'billing_vat', sanitize_text_field( $_POST[ 'billing_vat' ] ) );

        if ( ! empty( $_POST['billing_nin'] ) )
            update_user_meta( $user_id, 'billing_nin', sanitize_text_field( $_POST[ 'billing_nin' ] ) );
    }
    add_action( 'woocommerce_checkout_update_user_meta', 'xyz123_store_customer_billing_fields_in_checkout' );


    /*    Valido le modifiche sui campi custom effettuate nel checkout dell'utente.
    *     Almeno uno dei due campi deve essere compilato.
    */
    function xyz123_validate_customer_billing_fields_in_checkout()
    {
        $billing_vat = trim( $_POST['billing_vat'] );
        $billing_nin = trim( $_POST['billing_nin'] );

        if ( empty( $billing_vat ) && empty( $billing_nin ) )
            wc_add_notice( __( 'You must insert a NIN Code or Vat Code.' ), 'error' );
    }
    add_action('woocommerce_checkout_process', 'xyz123_validate_customer_billing_fields_in_checkout');


    /*    Aggiungo campi custom nel riepilogo ordine
    */
    function xyz123_add_customer_billing_fields_in_admin_order_meta( $order )
    {
    	$billing_vat = get_user_meta( $order->get_user_id(), 'billing_vat', true );
        $order_billing_vat = get_post_meta( $order->id, '_billing_vat', true );

    	$billing_nin = get_user_meta( $order->get_user_id(), 'billing_nin', true );
    	$order_billing_nin = get_post_meta( $order->id, '_billing_nin', true );

        $client_vat_label  = '<p><strong>' . __('VAT Number', 'woocommerce' ) . </strong><br>;
        $client_vat_label .= ( $billing_vat ) ? '(From Billing Address)' . $billing_vat : ( $order_billing_vat ) ? '(From Order Note)' . $order_billing_vat : 'N/D' ;
        echo $client_vat_label . '</p>';

        $billing_nin_label  = '<p><strong>' . __('NIN Code', 'woocommerce' ) . </strong><br>;
        $billing_nin_label .= ( $billing_nin ) ? $billing_nin : ( $order_billing_nin ) ? $order_billing_nin : 'N/D' ;
        echo $billing_nin_label . '</p>';
    }
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'xyz123_add_customer_billing_fields_in_admin_order_meta', 10, 1 );


    /*    Salvataggio campi fattura elettronica se utente non chiede di registrarsi (ospite)
    */
    function xyz123_before_checkout_create_order( $order_id )
    {
        $billing_pec = trim( $_POST['billing_pec'] );
        $billing_nin = trim( $_POST['billing_nin'] );

        update_post_meta( $order_id, '_billing_nin', sanitize_text_field( $billing_nin ) );
        update_post_meta( $order_id, '_billing_pec', sanitize_text_field( $billing_pec ) );
    }
    add_action('woocommerce_checkout_update_order_meta', 'xyz123_before_checkout_create_order');


    /*
        that's all folks
    */

Ovviamente la struttura del codice è la stessa qualora si voglia aggiungere il campo SDI per la fatturazione elettronica, vi basterà sostituire le etichette e il nome delle variabili.

Ti è piaciuto questo articolo su come inserire i campi per la fatturazione a WooCommerce? Oppure vorresti sapere di più? Lasciaci un commento! 

Tags:

Commenti