WooCommerce - Come Aggiungere un Campo Personalizzato agli Articoli del Carrello e ai Totali
Sto utilizzando il plugin WooCommerce e ho la seguente domanda:
Nella pagina del singolo prodotto, ho un prodotto dove, in base a determinate selezioni dell'acquirente, viene calcolato un valore di costo di spedizione, che devo poi passare/includere come parte degli articoli del carrello come nuova colonna "Costo di Spedizione" quando si visualizza il carrello.
Il punto è che l'acquirente potrebbe decidere di acquistare, ad esempio, tre prodotti diversi dove ciascuno di questi tre prodotti potrebbe avere calcoli di costi di spedizione variabili, dopo aver premuto il pulsante "Aggiungi al Carrello" tre volte.
Per esempio:
Le selezioni del Prodotto A calcolano un Costo di Spedizione di $2.00
Le selezioni del Prodotto B calcolano un Costo di Spedizione di $4.00
Le selezioni del Prodotto C calcolano un Costo di Spedizione di $6.00
Quindi, in base a quanto sopra, quando l'acquirente ha finito di fare acquisti e preme "Visualizza Carrello", voglio che veda:
Articolo Prezzo Costo Spedizione Quantità Totale
---------------------------------------------------------------------------------------
Prodotto A $10 $2 1 $10
Prodotto B $5 $4 1 $5
Prodotto C $15 $6 1 $15
È la colonna del campo personalizzato "Costo Spedizione" che vorrei aggiungere al carrello, che è ciò su cui non sono sicuro come fare.
Oltre a quanto sopra, voglio anche aggiungere ai "Totali del Carrello" sotto, un altro campo personalizzato di "Costo Spedizione" che totalizzerebbe $12, che verrebbe poi aggiunto al Totale Prodotti complessivo, cioè:
Totali Carrello
Subtotale Carrello $30
Costo Spedizione $12
Totale Ordine $42
Parte del codice che ho utilizzato per il costo di spedizione nel Totale del Carrello è:
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Costo Spedizione', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Quindi, ho bisogno di sapere come aggiungere il "Costo Spedizione" sia ai Dettagli Prodotti del Carrello che ai Totali del Carrello.
Qualsiasi aiuto con il codice sarebbe molto apprezzato.
Grazie.

Innanzitutto, memorizza il campo personalizzato quando modifichi il tuo prodotto. Supponiamo che tu stia utilizzando il campo personalizzato custom_shipping_cost. Assicurati che sia memorizzato come numero, ad esempio 20, NON $20.00.
Quindi, è necessario visualizzare questo campo nella pagina del carrello. Sfortunatamente, non esiste un filtro per aggiungere una nuova colonna nella tabella del carrello, quindi è necessario modificare il file del template, oppure se non è necessario che sia una colonna, puoi fare questo invece, questo codice aggiungerà il valore extra all'ultima colonna:
add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
//Ottieni il valore del campo personalizzato
$custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);
//Solo per test, puoi rimuovere questa riga
$custom_shipping_cost = 10;
//Controlla se abbiamo un costo di spedizione personalizzato, se sì, visualizzalo sotto il prezzo dell'articolo
if ($custom_shipping_cost) {
return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Costo di Spedizione';
} else {
return $subtotal;
}
}
Quindi, con questo, la prima parte della domanda è completata. Se vuoi visualizzarlo come nel tuo esempio sopra, devi duplicare il file plugins/woocommerce/templates/cart/cart.php in themes/tuotema/woocommerce/cart/cart.php. Poi modifica il file, aggiungi la tua colonna, puoi usare il codice sopra per visualizzare il prezzo.
Dopo questo, dobbiamo aggiornare i totali del carrello con i costi aggiuntivi. Il tuo codice con add_fee torna utile:
function woo_add_cart_fee() {
global $woocommerce;
$extra_shipping_cost = 0;
//Scansiona il carrello per scoprire i costi extra
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
//Ottieni le informazioni del prodotto
$_product = $values['data'];
//Ottieni il valore del campo personalizzato
$custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);
//Solo per test, puoi rimuovere questa riga
$custom_shipping_cost = 10;
//Somma i costi extra
$extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
}
//Controlliamo se abbiamo effettivamente un costo, poi lo aggiungiamo
if ($extra_shipping_cost) {
$woocommerce->cart->add_fee( __('Costo di Spedizione', 'woocommerce'), $extra_shipping_cost );
}
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Ecco fatto, dovrebbe funzionare dopo questo. Assicurati di rimuovere le righe "Solo per test..." da entrambi i codici, non ho creato il campo personalizzato sul mio sito per testare.
