Woocommerce/Jigoshop: aggiungere campo partita iva nel checkout


aggiungere-campo-partita-iva-checkout-woocommerce


Oggi vediamo come aggiungere un campo partita iva nel checkout di woocommerce o jigoshop di WordPress, obbligatorio per tutti gli ecommerce italiani. Un codice davvero utilissimo e sopratutto indispensabile se fate uso di questi plugin per WordPress.

Panoramica

Come ben sappiamo in tutti gli ecommerce italiani è necessario aggiungere il campo Partita Iva o Codice Fiscale nel checkout, necessario per poter emettere regolare fattura (non fate i disonesti, Monti ci guarda!). Vediamo come aggiungere questo campo con poche righe di codice.

Aggiungere il campo personalizzato al checkout

Il file da modificare è “woocommerce-functions.php” nel caso di woocommerce (troverete il suo gemello anche su Jigoshop). Questo file è una sorta di functions.php creato ad hoc per Woocommerce. Per elaborare degli elementi usando il woocommerce-functions dovete entrare nell’ottica degli “hooks”. In gergo volgare significa “ganci” nel nostro caso gli hooks indicano pezzi di codice atti a svolgere una particolare funzione “innestati” nel codice principale di Woocommerce. Aggiungere un campo al checkout è certamente un perfetto esempio in questo senso.

Dopo questo breve incipit teorico veniamo al sodo, ecco come aggiungere il campo.

NOTA: Tutto il codice da qui in avanti è da inserire all’interno del file: woocommerce-functions.php presente nella root di woocommerce/jigoshop 

Creiamo il campo:

// Hook in nel checkout
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
// NOTA shipping: appare nella colonna dx - billing appare sotto la colonna sx di fatturazione
$fields['billing']['piva'] = array( 
'label' => __('Codice Fiscale/P.IVA', 'woocommerce'),
'placeholder' => _x('Digita il tuo Cod fiscale o partita iva', 'placeholder', 'woocommerce'),//placeholder del campo input
'required' => false, // cambia in true se obbligatorio
'class' => array('form-row-wide'), //specifica una classe se vuoi
'clear' => true 
);
return $fields;
}

Vi invito a visionare i commenti passo-passo per maggiori info. Una cosa molto interessante è la possibilità di scegliere DOVE far apparire il campo grazie all’uso di billing (fatturazione) o shipping (spedizione) nell’array fields.

Una volta creato il campo dobbiamo anche renderlo “dinamico” e renderlo controllabile e gestibile dal pannello di gestione WordPress. Il codice di seguito serve anche per gestire gli errori nel caso il campo fosse lasciato vuoto. Ecco il codice interessato.

//Hook Admin 
add_action('woocommerce_checkout_process', 'piva_checkout_field_process');

function piva_checkout_field_process() {
global $woocommerce;
// Verifica se è presente quando cliccano su acquista
if (!$_POST['piva'])
$woocommerce->add_error( __('Digita la partita iva o codice fiscale per la fattura.') );
}

//Aggiorna dati
add_action('woocommerce_checkout_update_order_meta', 'piva_checkout_field_update_order_meta');

function piva_checkout_field_update_order_meta( $order_id ) {
if ($_POST['piva']) update_post_meta( $order_id, 'Partita IVA / Codice Fiscale', esc_attr($_POST['piva']));
}

Codice Completo

// Hook in nel checkout
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
// NOTA shipping: appare nella colonna dx - billing appare sotto la colonna sx di fatturazione
$fields['billing']['piva'] = array( 
'label' => __('Codice Fiscale/P.IVA', 'woocommerce'),
'placeholder' => _x('Digita il tuo Cod fiscale o partita iva', 'placeholder', 'woocommerce'),//placeholder del campo input
'required' => false, // cambia in true se obbligatorio
'class' => array('form-row-wide'), //specifica una classe se vuoi
'clear' => true 
);
return $fields;
}

//Hook Admin 
add_action('woocommerce_checkout_process', 'piva_checkout_field_process');

function piva_checkout_field_process() {
global $woocommerce;
// Verifica se è presente quando cliccano su acquista
if (!$_POST['piva'])
$woocommerce->add_error( __('Digita la partita iva o codice fiscale per la fattura.') );
}

//Aggiorna dati
add_action('woocommerce_checkout_update_order_meta', 'piva_checkout_field_update_order_meta');

function piva_checkout_field_update_order_meta( $order_id ) {
if ($_POST['piva']) update_post_meta( $order_id, 'Partita IVA / Codice Fiscale', esc_attr($_POST['piva']));
}

Conclusioni

Ecco come apparirà, una volta inserito, il campo nel riepilogo dell’ordine del vostro admin panel di WordPress:

Spero possa esservi utile, se ti è servito condividilo sui tuoi social preferiti! Enjoy!

Riccardo Mel

Sono un Web Designer/Developer italiano che vuole condividere le sue personali esperienze sul Web Design e sullo sviluppo WEB. Se vuoi collaborare al mio progetto inviami il tuo articolo o seguimi sui social network ! Se hai bisogno di un sito web funzionale e curato: | Contattami | +


22 commenti » Scrivi un commento

  1. Ciao Riccardo.. Per quanto riguarda jigoshop, come si usa questo codice? Bisogna scrivere jigoshop al posto di woocommerce ad ogni riga di codice?

  2. Ciao Riccardo!
    Ottima soluzione! Premetto che sono un newbie quindi forse sarà una domanda ovvia e stupida ma … perchè non mi compare la partita iva/codice fiscale nei dettagli di fatturazione? nella gestione ordine … il campo personalizzato si e anche il campo durante il checkout, ho cambiato e messo obbligo di campo e tutto va anche il codice fiscale/partita iva viene visualizzata nel campo personalizzato…
    grazie!!!

  3. Ho inserito per sbaglio il codice nella function nella root del sito invece che in quella di woocommerce (ho fatto un po’ di casino con filezilla) ora apparentemente woocommerce funziona solo quando dice lui, consigli per sistemare il problema?? da quello che ho capito ho alterato il dB ma non avendo un dump non posso ripristinarlo.

    • Ciao Ale, non saprei non mi è mai capitato, oltretutto “funziona solo quando dice lui” in che senso? puoi essere più preciso? (error code etc).

  4. ciao riccardo!
    non so se hai visto il commento sopra… ti ho scritto anche su fb ti invio gli screenshot che forse non si capisce quello che dico… il campo c’e’ anche il custom field ma nella welcome e nei dettagli non appaiono i dati… sbaglio io qualcosa?
    https://dl.dropbox.com/u/18151581/website/catalog/p%20iva.JPG
    https://dl.dropbox.com/u/18151581/website/catalog/orders_01.JPG
    https://dl.dropbox.com/u/18151581/website/catalog/custom%20fields.JPG
    grazie!
    ciao!

  5. Ciao Riccardo volevo chiederti se sai esattamente il nome del file da modificare in Jigoshop poiché non ho trovato quello da te indicato.

  6. Qualcuno ha verificato se funziona con jigoshop?
    Se lo inserisco in jigoshop_template_functions.php il server mi da un errore 500, altri file “functions” di jigosshop non ne vedo…
    Su un altro sito ho letto che il codice va aggiunto nel file functions.php del tema.

  7. Ciao Riccardo, complimenti per il sito!
    Volevo chiederti a che punto di woocommerce-functions.php consiglieresti di inserire l’intero codice.
    Grazie,

    Enrico

  8. Interessa anche a me la questione IVA su stampa della fattura perchè se non è possibile allora questa modifica non serve a nulla.

  9. ciao! ho creato un gruppo su facebook “Woocommerce Italia” iscrivetevi e vediamo di aiutarci con i vari problemi, scusate se “spammo” ma credo sia una cosa utile per tutti **nospam**
    grazie!

  10. Salve.
    Scrivo perchè ho utilizzato questo codice con jigoshop.
    Nella ho utilizzato ho dovuto fare alcune modifiche sui nomi degli hook :
    woocommerce_checkout_fields => jigoshop_billing_fields
    woocommerce_checkout_process => jigoshop_checkout_process
    woocommerce_checkout_update_order_meta => jigoshop_checkout_update_order_meta + jigoshop_process_shop_order_meta

    Ho anche usato questo codice :
    // aggiunge il cf/piva nei dettagli dell’utente quando visualizza il proprio ordine
    add_action(‘jigoshop_after_order_customer_details’,'my_view_fiscalcode_field’);
    function my_view_fiscalcode_field($order_id) {
    $order = new jigoshop_order($order_id);
    echo ”;
    echo ‘P.IVA:’ . $order->billing_euvatno . ”;
    echo ‘Cod.Fisc.:’ . get_post_meta($order_id,’billing-fisccod’,true) . ”;
    echo ”;
    }

    //aggiunge codice fiscale e partita iva nell’email dell’ordine
    add_action(‘jigoshop_after_email_customer_details’,'my_email_fiscalcode_field’);
    function my_email_fiscalcode_field($order_id) {
    $order = new jigoshop_order($order_id);
    echo ‘P.IVA: ‘ . $order->billing_euvatno . PHP_EOL;
    echo ‘Cod.Fisc.: ‘ . get_post_meta($order_id,’billing-fisccod’,true) . PHP_EOL;

    }

    // visualizza il codice fiscale nell’elenco ordini
    add_filter(‘manage_shop_order_posts_custom_column’, ‘my_edit_order_columns’,20);
    function my_edit_order_columns($column){
    global $post;
    $order = new jigoshop_order($post->ID);

    switch ($column) {
    case “billing_and_shipping” :
    echo ‘P.IVA :’.$order->billing_evatno.’C.F. : ‘.get_post_meta($order->id,’billing-fisccod’,true).”;
    break;
    };
    }

    P.S. : date il nome billing-fisccod anche ad un campo dell’utente, automaticamente jigoshop vi riempirà il campo in fase checkout con il codice fiscale dell’utente

  11. Ciao Riccardo,
    ho seguito le tue istruzioni e funziona tutto alla perfezione. (su woocommerce)

    Il mio unico problema è che nel riepilogo dell’ordine e nelle varie mail di conferma che partono il campo codice fiscale non compare?
    Cosa posso fare?

    Grazie!

  12. salve sono riuscito ad inserire il campo partita iva, adesso il mio problema è differenziare 2 tipologie di acquirenti: con o senza partita iva. mi spiego meglio: i clienti con partita iva avranno diritto ad uno sconto maggiore rispetto ai clienti senza partita iva come differenziare le tipologie di clienti?

Lascia un Commento

I campi con *sono obbligatori.


È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>