Blog · WooCommerce

Aggiungere il pulsante di recesso a WooCommerce. Tre modi, una scadenza.

Circa il 45 percento degli shop europei gira su WordPress con WooCommerce. Per questi commercianti ci sono tre modi realistici per aggiungere il pulsante. Eccoli tutti e tre — con il codice, con le insidie, senza marketing.

La situazione di partenza

Dal 19 giugno 2026 ogni shop B2C nell'UE necessita di un pulsante di recesso. In Italia la base giuridica è la Direttiva (UE) 2023/2673, recepita con il D.Lgs. 31 dicembre 2025, n. 209, che modifica il Codice del Consumo. Non è prevista alcuna fase transitoria.

Il pulsante prevede due fasi: „Recedi dal contratto“ come ingresso, „Conferma il recesso“ al termine del modulo. In mezzo un breve modulo, seguito da una conferma di ricezione via e-mail su un supporto durevole.

Modo A: tag script nell'header

Il modo più semplice. Aggiungi un tag script nell'area header della tua installazione WordPress. Lo script carica il widget, riconosce il tuo shop tramite la chiave del widget e renderizza il pulsante in uno Shadow DOM, senza entrare in conflitto con il CSS del tuo tema.

Per farlo modifichi l'header.php del tuo tema figlio. Mai quello del tema genitore, altrimenti la voce sparisce dopo il prossimo aggiornamento.

<!-- widget/header.php, im Child-Theme -->
<?php wp_head(); ?>
<script
  src="https://widerrufbutton.net/widget/v1/wh.js"
  data-shop-id="<?php echo esc_attr(get_option('wrb_shop_id')); ?>"
  data-position="footer"
  data-lang="de"
  async
  defer
></script>

Chi non ha accesso al tema può inserire lo stesso script tramite un plugin come „Insert Headers and Footers“. Funziona in modo identico, ma hai una dipendenza in più.

Modo B: filtro functions.php

Più pulito di un intervento diretto sull'header.php è un hook. Registri una funzione che fornisce lo script tramite il filtro wp_enqueue_scripts di WordPress. Vantaggio: il tuo tema resta intatto e la voce può essere disattivata in modo pulito.

// functions.php deines Child-Themes
add_action('wp_footer', function () {
    $shop_id = get_option('wrb_shop_id');
    if (empty($shop_id)) {
        return;
    }
    printf(
        '<script src="https://widerrufbutton.net/widget/v1/wh.js" ' .
        'data-shop-id="%s" data-position="footer" data-lang="de" async defer></script>',
        esc_attr($shop_id)
    );
}, 99);

Il valore di priorità 99 fa sì che lo script venga caricato dopo tutti gli altri script del footer. Questo impedisce ai plugin di cache di minificarlo troppo presto.

Modo C: plugin WordPress

Per i commercianti senza un background da sviluppatore stiamo lavorando a un plugin WordPress ufficiale. Installalo, inserisci l'ID dello shop, salva. Il pulsante compare nel footer. Il plugin aggancerà lo script come nel Modo B, fornirà una pagina di impostazioni nell'admin WP e aggiungerà un controllo se il dominio configurato corrisponde all'installazione WordPress.

Chi vuole andare online oggi usa il Modo A o B. Il plugin è una comodità, non un prerequisito.

Conflitti con i page builder

Gli shop WooCommerce raramente girano puri. La maggior parte usa Elementor, Divi, Bricks o WPBakery. Ognuno di questi builder renderizza i template del footer in modo autonomo e talvolta aggira il flusso di hook standard.

Elementor: verifica se il tuo footer è un „Theme Builder Footer“. Se sì, aggiungi il widget tramite un elemento HTML nel footer di Elementor, non nel functions.php. Altrimenti Elementor lo sovrascrive.

Divi: le Divi Theme Options hanno un campo „Code Integration“. Inserisci lì i tag script, nella sezione „Body“.

Bricks: usa un proprio hook chiamato bricks_body_end. Il tuo enqueue deve puntare a quello.

Plugin di cache e di sicurezza

WP Rocket, WP Super Cache, LiteSpeed Cache e Autoptimize amano mettere mano ai tag script. Li minificano, li combinano, li ritardano o li caricano via JavaScript. Con il pulsante di recesso questo è un problema, perché il pulsante potrebbe comparire troppo tardi o non caricarsi affatto.

Soluzione: nelle impostazioni della cache, escludi widerrufbutton.net da minify e combine. In WP Rocket si chiama „Never delay JavaScript“. In LiteSpeed, „JS Excludes“. In Autoptimize, „Exclude scripts from Autoptimize“.

Wordfence e iThemes Security possono segnalare come sospette le richieste POST verso domini esterni. Il widget invia il recesso alla nostra API, non dal tuo server. La richiesta parte dal browser del cliente direttamente verso di noi, quindi non dovrebbero esserci conflitti. Se ci sono comunque: inserisci widerrufbutton.net nella whitelist.

Verificare che l'installazione funzioni davvero

Apri il tuo shop in modalità incognito. Non scorrere. Il pulsante deve essere visibile nella navigazione o nel footer. Cliccalo. La finestra modale deve comparire senza salti di scorrimento. Digita un nome di prova, un'e-mail di prova, clicca „Conferma il recesso“. Dovresti ricevere un'e-mail nel giro di pochi secondi.

Nella dashboard di WiderrufButton il recesso di prova compare sotto Recessi. Elimina poi la voce di prova per mantenere pulite le tue statistiche.

Cosa richiede la legge dal punto di vista tecnico

Il pulsante deve essere raggiungibile senza scorrere, il che in pratica significa „above the fold“ nella navigazione o nel footer visibile. Deve essere disponibile per l'intera durata del periodo di recesso, quindi almeno quattordici giorni dal ricevimento della merce. Lo shop non deve richiedere un login.

La conferma di ricezione deve seguire senza indebito ritardo, contenere il testo integrale della dichiarazione di recesso, data e ora comprese, ed essere fornita su un supporto durevole. Una e-mail è sufficiente. Un popup toast no.

Tutto ciò che è tecnicamente necessario dietro a questo lo gestisce il widget: validazione, rate limiting (10 richieste al minuto per IP), controllo CORS rispetto al tuo dominio registrato, invio delle e-mail, archiviazione a lungo termine con catena di hash. Dettagli in proposito nella guida al pulsante di recesso.

Rischio di diffida e proroga del termine di recesso

Se il pulsante manca, scattano due meccanismi. Le associazioni a tutela della concorrenza inviano diffide che costano tipicamente da 500 a 2.000 €. E il termine di recesso si proroga automaticamente a dodici mesi e quattordici giorni. Un cliente può allora recedere per un anno intero.

Entrambi i rischi sono evitabili aggiungendo il pulsante oggi stesso.

Un tag script, tutti i requisiti

WiderrufButton fornisce il processo a due fasi, la conferma di ricezione e l'archiviazione — da un unico bundle, sotto i 15 KB.

Inizia subito gratis

14 giorni gratis · Nessuna carta di credito