WooCommerce - Come Aggiungere un Campo Personalizzato agli Articoli del Carrello e ai Totali

26 gen 2014, 06:42:13
Visualizzazioni: 26.5K
Voti: 7

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.

7
Commenti

Quale codice hai provato finora?

Brad Dalton Brad Dalton
26 gen 2014 06:50:25

Ciao, ho aggiornato il mio post sopra ma ho hard-codato 100, che non è quello che voglio ma calcolato.

tonyf tonyf
26 gen 2014 07:24:40

Questa non è una domanda su WordPress ma su WooCommerce, è meglio chiederla nei canali di supporto del plugin poiché questo tipo di domande sono per lo più off-topic qui

Mark Kaplun Mark Kaplun
26 gen 2014 07:25:37

Strano, dato che ho visto molte domande in questo forum con il tag WooCommerce.

tonyf tonyf
26 gen 2014 07:27:04

sì, e la percentuale di risposte utili non è molto superiore a zero.

Mark Kaplun Mark Kaplun
26 gen 2014 11:09:21

Quindi Mark Kaplun, saresti in grado di aiutarmi con le mie domande? Te ne sarei davvero grato.

tonyf tonyf
26 gen 2014 12:45:57

credimi se conoscessi la risposta lo farei

Mark Kaplun Mark Kaplun
26 gen 2014 16:35:44
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 1
2

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.

26 gen 2014 14:06:31
Commenti

Ciao passatgt - Apprezzo molto il tuo aiuto e l'eccellente esempio con spiegazione. Proverò quello che hai suggerito e, se va tutto bene, va bene se torno da te con eventuali intoppi?

tonyf tonyf
26 gen 2014 14:26:01

Se è relativo alla domanda originale, certo :)

passatgt passatgt
26 gen 2014 14:34:11