Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineWooCommerce

PDF e fatture WooCommerce: invio automatico, conformità italiana e archiviazione

08 Nov 2026 — 09:30 9 min di lettura
PDF e fatture WooCommerce: invio automatico, conformità italiana e archiviazione

Inviare fatture in PDF allegate agli ordini non è solo comodità: in Italia è obbligo normativo con conservazione sostitutiva. Come automatizzare la generazione e l'invio senza appesantire WooCommerce.

L'invio automatico delle fatture in PDF allegato agli ordini WooCommerce è una di quelle funzionalità che sembra un optional di UX — 'comodo per il cliente' — e in realtà è un obbligo normativo con conseguenze legali e fiscali. In Italia, la conservazione sostitutiva dei documenti fiscali è regolata dall'Agenzia delle Entrate e dalla normativa digitale, e un e-commerce che non genera o non archivia correttamente le fatture si trova esposto non a una penalità di Google ma a sanzioni tributarie. La differenza tra 'inviare una conferma d'ordine in PDF' e 'emettere fattura elettronica a norma' è sostanziale e dipende dal tipo di cliente e dal volume.

Il punto di partenza è distinguere cosa è obbligatorio da cosa è conveniente. La conferma d'ordine via email non è una fattura. La ricevuta o fattura per clienti finali (B2C) sotto la soglia dei 77,47€ (regime forfettario o minimi) può non richiedere fattura elettronica, ma richiede comunque ricevuta o documento commerciale. Per i clienti business (B2B) e sopra certe soglie, la fattura elettronica via SDI (Sistema di Interscambio) è obbligatoria. Un WooCommerce italiano non gestisce questa complessità in modo nativo — serve un plugin dedicato o un'integrazione con un software di fatturazione.

Generare la fattura PDF con WooCommerce PDF Invoices

Il plugin più diffuso per la generazione di fatture PDF in WooCommerce è WooCommerce PDF Invoices & Packing Slips (o la versione Pro per funzioni avanzate). Genera il PDF della fattura per ogni ordine e lo allega all'email di conferma, in modo automatico. La configurazione di base richiede attenzione a un dettaglio: la numerazione progressiva delle fatture. In Italia le fatture devono avere un numero progressivo per anno fiscale, non il numero d'ordine WooCommerce (che è progressivo ma non per anno fiscale e non ha requisiti di non modificabilità):

wp-config.php
// Configurazione numerazione fatture conforme (da aggiungere al plugin o functions.php)
// Usa un post type dedicato per la numerazione progressiva delle fatture

add_action( 'woocommerce_order_status_completed', 'wpplanet_emetti_fattura' );

function wpplanet_emetti_fattura( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) return;

    // Evita duplicati: se l'ordine ha già una fattura, esci
    $fattura_id = $order->get_meta( '_numero_fattura' );
    if ( $fattura_id ) return;

    // Numero progressivo per anno (conservato in wp_options, incrementato per ogni fattura)
    $anno = date( 'Y' );
    $key = "wpplanet_numero_fattura_{$anno}";
    $numero = (int) get_option( $key, 0 ) + 1;
    update_option( $key, $numero, false );

    // Formato: 2026/0001
    $numero_formattato = sprintf( '%d/%04d', $anno, $numero );
    $order->update_meta_data( '_numero_fattura', $numero_formattato );
    $order->save();
}
Nota: La numerazione delle fatture in Italia deve essere progressiva e ininterrotta per anno fiscale — non puoi avere fatture 1, 2, 3, 5 (salta la 4). Questo snippet incrementa un contatore in wp_options che persiste tra un riavvio e l'altro del plugin. Non usare il numero d'ordine WooCommerce come numero di fattura: gli ordini possono essere cancellati o riaperti, le fatture no.

Allegare la fattura all'email di conferma ordine

Una volta generata, la fattura PDF va allegata all'email di conferma ordine che WooCommerce invia al cliente. Il plugin PDF Invoices lo fa in automatico se configurato, ma se vuoi personalizzare l'email o usare un'integrazione custom, l'hook da usare è woocommerce_email_attachments:

wp-config.php
// Allega la fattura PDF all'email di conferma ordine
add_filter( 'woocommerce_email_attachments', function( $attachments, $email_id, $order ) {
    // Solo sull'email di completamento ordine (customer_completed_order)
    if ( $email_id !== 'customer_completed_order' || ! $order ) {
        return $attachments;
    }

    // Percorso del PDF generato (dipende dal plugin)
    $invoice_path = WP_CONTENT_DIR . '/uploads/fatture/fattura-' . $order->get_id() . '.pdf';

    if ( file_exists( $invoice_path ) ) {
        $attachments[] = $invoice_path;
    }

    return $attachments;
}, 10, 3 );
Nota: Le fatture PDF vanno archiviate fuori dalla root web (non in /uploads pubblico) se contengono dati sensibili. La conservazione sostitutiva a norma richiede che i file non siano modificabili dopo l'emissione — genera il PDF con permessi di sola lettura o archivialo in un bucket dedicato.

Conservazione sostitutiva: archiviazione a norma

La conservazione sostitutiva è l'obbligo di mantenere le fatture elettroniche in formato non modificabile per 10 anni. WooCommerce PDF Invoices non gestisce questo aspetto — genera il PDF ma non lo archivia a norma. Per la conformità italiana serve un'integrazione con un servizio di conservazione sostitutiva (Aruba, InfoCert, Namirial) che applica una marca temporale e una firma digitale al PDF e lo conserva in un ambiente conforme. La pratica comune è di esportare i PDF via API o webhook verso il sistema di conservazione, subito dopo l'emissione:

wp-config.php
// Invia il PDF della fattura al sistema di conservazione sostitutiva (esempio generico)
add_action( 'wpplanet_fattura_emessa', function( $order_id, $invoice_path ) {
    $api_url = 'https://api.conservazione.it/upload';
    $api_key = get_option( 'wpplanet_conservazione_api_key' );

    $response = wp_remote_post( $api_url, array(
        'timeout' => 30,
        'headers' => array(
            'Authorization' => 'Bearer ' . $api_key,
            'Content-Type'  => 'multipart/form-data',
        ),
        'body' => array(
            'file'      => file_get_contents( $invoice_path ),
            'filename'  => basename( $invoice_path ),
            'tipo'      => 'fattura',
            'partita_iva' => 'IT01234567890',
        ),
    ) );

    if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) === 200 ) {
        $body = json_decode( wp_remote_retrieve_body( $response ), true );
        $conservazione_id = $body['id'] ?? null;
        if ( $conservazione_id ) {
            $order = wc_get_order( $order_id );
            $order->update_meta_data( '_id_conservazione', $conservazione_id );
            $order->save();
        }
    } else {
        // Log dell'errore per retry manuale
        error_log( 'Errore conservazione sostitutiva per ordine ' . $order_id );
    }
}, 10, 2 );
Nota: Questo è uno scheletro. La conservazione sostitutiva è un processo complesso con marca temporale, firma digitale e hash del file. Usare un servizio dedicato (Aruba, InfoCert) evita di implementarla da zero. La chiave API va salvata in wp_options con autoload=no o in una variabile di ambiente, mai nel codice.

Fattura elettronica e SDI: quando serve davvero l'integrazione

Per i clienti business (B2B) o sopra le soglie del regime, l'obbligo è la fattura elettronica via SDI. WooCommerce non ha una funzione nativa per l'invio allo SDI — serve un'integrazione con un software gestionale (Fatture in Cloud, Danea, TeamSystem) o un plugin specializzato. Il flusso tipico: WooCommerce emette l'ordine, un webhook o un'API invia i dati dell'ordine al gestionale, il gestionale genera la fattura XML in formato FatturaPA, la invia a SDI, e restituisce a WooCommerce l'esito. È un'integrazione che non puoi fare a mano — i formati e gli obblighi normativi cambiano troppo spesso per costruirli in autonomia.

wp-config.php
// Webhook per inviare i dati ordine al gestionale fatturazione (Fatture in Cloud / Danea / TeamSystem)
add_action( 'woocommerce_order_status_completed', function( $order_id ) {
    $order = wc_get_order( $order_id );
    $fatturazione_api = 'https://api.fattureincloud.it/v1';
    $api_key = getenv( 'FATTURE_API_KEY' ); // da variabile d'ambiente, non nel codice

    $payload = array(
        'numero_ordine'  => $order->get_id(),
        'data'           => $order->get_date_completed()->format( 'Y-m-d' ),
        'cliente'        => array(
            'ragione_sociale' => $order->get_billing_company() ?: $order->get_formatted_billing_full_name(),
            'partita_iva'     => get_post_meta( $order_id, '_billing_vat', true ),
            'email'           => $order->get_billing_email(),
        ),
        'totale'         => $order->get_total(),
        'valuta'         => $order->get_currency(),
    );

    wp_remote_post( $fatturazione_api . '/fatture', array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $api_key,
            'Content-Type'  => 'application/json',
        ),
        'body'    => json_encode( $payload ),
        'timeout' => 30,
    ) );
}, 5 );
Nota: Le chiavi API del sistema di fatturazione non vanno mai nel codice né in wp_options accessibile. Usa getenv() con una variabile d'ambiente del server o un sistema di secrets. Il gestionale genera la fattura XML FatturaPA e gestisce l'invio a SDI; WooCommerce resta solo il sistema di e-commerce.

L'audit della conformità fiscale di un WooCommerce

Un e-commerce WooCommerce che fattura in Italia ha bisogno di un audit fiscale-periodico che verifichi: numerazione progressiva delle fatture, conservazione sostitutiva attiva, invio a SDI per i clienti business, e correttezza dei dati fiscali esposti (partita IVA del cliente, codice fiscale, natura dell'operazione). Senza questo, un'e-commerce può andare benissimo per anni e scoprire al primo controllo di non essere conforme — con sanzioni che si sommato per ogni fattura non corretta.

Il punto pratico è che la conformità fiscale di un WooCommerce italiano non è un'opzione, ma va costruita con le integrazioni giuste fin dall'inizio. Generare PDF senza numerarli correttamente, o inviarli senza archiviarli a norma, sono errori che costano sanzioni reali. Un check-up WooCommerce che include la verifica della conformità fiscale è il modo più rapido di capire se il tuo store è a posto o se hai un problema fiscale che non sai di avere.

Assistenza WooCommerce

Fatture, conformità fiscale e conservazione del tuo e-commerce a norma.

Verifica tecnica del tuo store WooCommerce: generazione fatture PDF, numerazione, conservazione sostitutiva e integrazione con SDI per la conformità fiscale italiana.

Assistenza WooCommerce
Condividi