
Come rimuovere il pulsante aggiungi al carrello in WooCommerce
Il pulsante «Aggiungi al carrello» è il meccanismo fondamentale di WooCommerce che fa funzionare il tuo negozio. Ma fondamentale non significa sempre appropriato. Un sito vetrina senza possibilità di ordinare, un prodotto su commessa che richiede un prezzo personalizzato, un articolo esaurito che non vuoi ancora depubblicare: in tutti questi casi il classico Aggiungi al carrello è solo d'intralcio.
Potresti adottare l'approccio drastico e impostare lo stato del prodotto su «nascosto», ma così facendo il prodotto scompare dal catalogo e smette di essere indicizzato. Una soluzione molto più pulita è mantenere visibile la scheda prodotto rimuovendo o sostituendo il pulsante di acquisto. WooCommerce mette a disposizione diversi hook e filtri per questo scopo, dalla disattivazione globale alla rimozione mirata su un singolo prodotto.
Qui sotto trovi tutti i metodi funzionanti, dal più semplice al più avanzato. Ciascuno è stato testato sulla versione corrente di WooCommerce.
💡 Panoramica rapida:
- Intero sito in un colpo solo: due chiamate
remove_actionnelfunctions.php, una per la griglia prodotti e una per la pagina prodotto - Homepage e archivi: filtro condizionale
woocommerce_is_purchasableconis_shop() - Tutte le categorie o una categoria specifica: stesso filtro con
is_product_category()ois_product_category('slug') - Singolo prodotto: tre metodi, toggle amministrativo integrato, azzeramento scorte, filtro per
product_id - Per chi ha bisogno di un pulsante: sostituiscilo con testo personalizzato o un pulsante «Richiedi un preventivo»
1. Rimuovere il pulsante dall'intero sito
Se il tuo negozio funziona esclusivamente come vetrina senza alcuna intenzione di vendita online, l'approccio più semplice è rimuovere il pulsante globalmente usando due hook nel functions.php del tema attivo.
Il primo hook gestisce le schede prodotto nella griglia (lo shortcode [products], la pagina negozio, le categorie), mentre il secondo gestisce le pagine prodotto individuali:
1 // Remove button from card grid 2 remove_action( 3 'woocommerce_after_shop_loop_item', 4 'woocommerce_template_loop_add_to_cart' 5 ); 6 7 // Remove button from product page 8 remove_action( 9 'woocommerce_single_product_summary', 10 'woocommerce_template_single_add_to_cart', 11 30 12 );
È meglio inserire questo codice non direttamente nel functions.php del tema (con il rischio di perdere le modifiche a ogni aggiornamento), ma tramite il plugin Code Snippets o un tema child. Prima di qualsiasi modifica, crea un backup; senza non avrai un punto a cui tornare.
2. Nascondere il pulsante nella homepage e nelle pagine archivio
La disattivazione globale non va bene per tutti. Uno scenario comune: il pulsante deve restare sulla pagina prodotto ma sparire dal catalogo e dalla homepage (dove i prodotti sono mostrati in elenco).
Qui, invece di remove_action, conviene usare il filtro woocommerce_is_purchasable con un controllo condizionale is_shop():
1 function ts_hide_cart_on_shop() { 2 if ( is_shop() || is_front_page() ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_on_shop' );
L'hook wp viene eseguito presto, prima del rendering, ed evita controlli ripetuti che rallenterebbero la pagina. is_shop() copre la pagina principale del negozio, mentre is_front_page() copre una homepage statica se contiene uno shortcode WooCommerce. Il filtro non si applica alle pagine prodotto, quindi l'acquisto funziona normalmente lì.
3. Rimuovere il pulsante da tutte le pagine categoria
Stesso principio, ma sostituisci is_shop() con is_product_category() senza parametri. Il filtro intercetterà qualsiasi categoria prodotto:
1 function ts_hide_cart_in_categories() { 2 if ( is_product_category() ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_in_categories' );
Il pulsante rimane sulle pagine prodotto individuali. È utile quando il catalogo funge da vetrina e l'acquisto è disponibile solo dopo essere entrati nella scheda prodotto, per esempio per far sì che l'utente legga prima descrizione e specifiche.
4. Disattivare il pulsante per una singola categoria
A volte una categoria del tuo negozio è su commessa mentre le altre sono standard. In quel caso serve un blocco mirato tramite lo slug della categoria:
1 function ts_hide_cart_for_category() { 2 if ( is_product_category( 'pod-zakaz' ) ) { 3 add_filter( 'woocommerce_is_purchasable', '__return_false' ); 4 } 5 } 6 add_action( 'wp', 'ts_hide_cart_for_category' );
Sostituisci 'pod-zakaz' con lo slug reale della tua categoria di destinazione. Puoi trovare lo slug nel pannello di amministrazione sotto «Prodotti → Categorie» nella colonna «Slug». Il filtro disattiva silenziosamente l'acquisto per tutti i prodotti della categoria; il pulsante sparirà anche dalla pagina prodotto perché WooCommerce verifica is_purchasable() anche lì.
5. Nascondere il pulsante per un prodotto specifico
Lo scenario più comune: un prodotto su centinaia deve apparire temporaneamente senza la possibilità di essere ordinato. WooCommerce offre tre modi per farlo.
Metodo 1: toggle amministrativo integrato
Vai alla modifica del prodotto, apri la scheda «Inventario» e imposta «Stato magazzino» su «Esaurito». Imposta la casella «Consenti ordini arretrati» su «Non consentire». Salva il prodotto e il pulsante Aggiungi al carrello sparirà automaticamente.

Questo approccio non richiede codice e funziona da subito. Lo svantaggio è che il prodotto viene contrassegnato come «Esaurito», cosa non sempre desiderabile (per esempio per prodotti digitali o servizi dove il concetto di «scorta» non ha senso).
Metodo 2: azzerare la quantità in magazzino
Nella stessa scheda «Inventario», deseleziona «Gestisci scorte» oppure imposta la quantità a 0. Il pulsante sparirà quando la giacenza raggiunge lo zero.

Questo metodo funziona bene per i prodotti fisici: non appena l'ultima unità viene venduta, il pulsante sparisce da solo. Tuttavia, come il primo metodo, il prodotto riceve lo stato di esaurito.
Metodo 3: filtro per ID prodotto
Se devi rimuovere il pulsante senza modificare lo stato «disponibile», usa un filtro che controlli l'ID:
1 function ts_disable_cart_for_product( $purchasable, $product ) { 2 $target_ids = array( 22, 47, 103 ); // Product IDs for which we remove the button 3 if ( in_array( $product->get_id(), $target_ids ) ) { 4 return false; 5 } 6 return $purchasable; 7 } 8 add_filter( 'woocommerce_is_purchasable', 'ts_disable_cart_for_product', 10, 2 );
Ecco cosa succede: il filtro woocommerce_is_purchasable riceve lo stato attuale $purchasable e l'oggetto $product. Se $product->get_id() corrisponde a uno degli ID nell'array $target_ids, restituisce false e il pulsante viene soppresso. Per tutti gli altri prodotti viene restituito lo stato originale.
$product->get_id() è il metodo in uso da WooCommerce 3.0. La vecchia proprietà $product->id (accesso diretto al campo) è deprecata e genera avvisi nei log; non usarla.
Puoi espandere l'array $target_ids secondo necessità. Trova l'ID prodotto nel pannello di amministrazione: passa il mouse sul nome del prodotto nell'elenco e l'ID apparirà nella barra di stato del browser (oppure apri il prodotto e guarda il numero nell'URL: post=22).
6. Sostituire il pulsante con testo personalizzato
A volte non serve rimuovere il pulsante, ma sostituirlo. Per esempio, per prodotti su commessa potresti mostrare «Richiedi un preventivo» con un link a un modulo di contatto.
1 function ts_replace_cart_button_single( $html, $product ) { 2 $target_ids = array( 22 ); 3 if ( in_array( $product->get_id(), $target_ids ) ) { 4 return '<a href="/contact" class="button alt">Request a quote</a>'; 5 } 6 return $html; 7 } 8 add_filter( 'woocommerce_loop_add_to_cart_link', 'ts_replace_cart_button_single', 10, 2 );
Questo filtro intercetta l'HTML del pulsante prima dell'output e lo sostituisce con un link personalizzato usando la classe .button. Funziona sia per la griglia prodotti che per la pagina prodotto; WooCommerce usa lo stesso filtro in entrambi i contesti.
Per logiche più complesse (testo diverso per prodotti diversi, un pulsante personalizzato con finestra modale), valuta woocommerce_template_single_add_to_cart per una sostituzione completa del template del pulsante tramite tema child.
⁉️🤔 Domande frequenti
È sicuro modificare direttamente il functions.php?
Senza esperienza, no. functions.php viene eseguito a ogni richiesta e un errore di sintassi al suo interno fa cadere l'intero sito (schermata bianca). Usa il plugin Code Snippets, che fornisce un'interfaccia per aggiungere frammenti PHP con controllo di sintassi e disattivazione automatica in caso di errori fatali. In alternativa, modifica via FTP/SFTP dopo aver salvato una copia funzionante del file in locale.
Come nascondo il pulsante solo per gli utenti non autenticati?
Aggiungi un controllo
is_user_logged_in()a una qualsiasi delle condizioni sopra. Per esempio:if ( ! is_user_logged_in() && is_shop() ) { add_filter(...); }. Gli ospiti vedono una vetrina senza pulsanti; gli utenti registrati hanno piena funzionalità. È un caso d'uso comune per i negozi all'ingrosso dove prezzi e carrello diventano disponibili solo dopo il login.
Il pulsante è sparito ma il prezzo e le varianti sono rimasti; è normale?
Sì. Gli hook
remove_actione il filtrowoocommerce_is_purchasablerimuovono solo il pulsante di aggiunta al carrello. Il prezzo e i selettori di variante (colore, taglia) rimangono visivamente. Se devi nascondere anche quelli, aggiungi CSS:.single-product .variations_form, .single-product .price { display: none; }, oppure usa un intervento più profondo tramitewoocommerce_get_price_html.
Dopo un aggiornamento del tema tutte le mie modifiche sono andate perse; come posso proteggermi?
Non fare mai modifiche direttamente nel
functions.phpdel tema padre. Qualsiasi aggiornamento del tema sovrascriverà il file. Tre opzioni affidabili: un tema child (con il propriofunctions.php), il plugin Code Snippets (i frammenti risiedono nel database e sopravvivono agli aggiornamenti), o un semplice MU-plugin (/wp-content/mu-plugins/disable-cart.php, che non può essere disattivato dal pannello di amministrazione e non è influenzato dagli aggiornamenti).
Posso ripristinare il pulsante per un prodotto specifico dopo una disattivazione globale?
Sì. Dopo che il filtro
woocommerce_is_purchasablerestituisce globalmente__return_false, aggiungi un secondo filtro con priorità più alta che restituiscatrueper gli ID desiderati:add_filter( 'woocommerce_is_purchasable', 'ts_enable_for_specific', 20, 2 );. La priorità 20 viene eseguita dopo la 10 e può sovrascrivere il valore restituito.
Quale metodo scegliere per il tuo caso
Se stai costruendo una vetrina senza pagamenti online, usa la disattivazione globale con due chiamate remove_action. Devi bloccare gli acquisti nel catalogo ma mantenerli nelle schede prodotto? Usa il filtro con is_shop(). Una categoria problematica? Usa is_product_category('slug'). Un prodotto su centinaia? Usa le impostazioni di magazzino integrate o il filtro per ID.
E cosa più importante: prima di modificare qualsiasi cosa nel functions.php, fai un backup. Non tramite un plugin che stai per modificare, ma un backup completo tramite il tuo hosting o UpdraftPlus. Cinque minuti spesi per un backup ti risparmiano ore di ripristino.



