Ottenere i metodi di spedizione WooCommerce programmaticamente

16 feb 2020, 00:28:43
Visualizzazioni: 36.5K
Voti: 2

Come posso recuperare i metodi di spedizione nel mio negozio WooCommerce? Ho questo nella mia pagina di checkout:

la mia pagina di checkout con i metodi di spedizione

E all'interno del mio pannello amministrativo appare così:

metodi di spedizione nel pannello amministrativo di WordPress

Ho provato a fare:

WC()->shipping->load_shipping_methods()

Ma non restituisce il testo/prezzo di GLS o Click and collect. Restituisce questi dati: https://paste.laravel.io/0c1aff96-dbed-452c-856f-6d62b6f1f47e

3
Commenti

Quale output ottieni quando usi WC()->shipping->get_shipping_methods(); ?

7uc1f3r 7uc1f3r
16 feb 2020 10:37:43

@L7c1f3r lo stesso output presente nel pastebin..

FooBar FooBar
16 feb 2020 11:53:47

Ho testato ora e in effetti, lo stesso risultato. Se guardo il tuo output e lo confronto con il mio, vedo che i dati sono presenti, ma ad esempio 'GLS' manca come method_title, mentre 'Flat rate' è mostrato lì, ma è lo stesso con il mio output, quindi non c'è nulla di sbagliato in questo. 'GLS', risulta essere l'etichetta. Qual è la tua intenzione finale, quali dati vuoi recuperare e dove intendi utilizzarli successivamente?

7uc1f3r 7uc1f3r
16 feb 2020 22:27:40
Tutte le risposte alla domanda 1
3

Devi utilizzare qualcosa di diverso come segue (commentato):

// Scorri i pacchetti di spedizione da WC_Session (possono essere multipli in alcuni casi)
foreach ( WC()->cart->get_shipping_packages() as $package_id => $package ) {
    // Controlla se esiste una spedizione per il pacchetto corrente
    if ( WC()->session->__isset( 'shipping_for_package_'.$package_id ) ) {
        // Scorri i metodi di spedizione per il pacchetto corrente
        foreach ( WC()->session->get( 'shipping_for_package_'.$package_id )['rates'] as $shipping_rate_id => $shipping_rate ) {
            $rate_id     = $shipping_rate->get_id(); // stessa cosa della variabile $shipping_rate_id (combinazione del metodo di spedizione e ID istanza)
            $method_id   = $shipping_rate->get_method_id(); // Lo slug del metodo di spedizione
            $instance_id = $shipping_rate->get_instance_id(); // L'ID dell'istanza
            $label_name  = $shipping_rate->get_label(); // Il nome del metodo come etichetta
            $cost        = $shipping_rate->get_cost(); // Il costo senza tasse
            $tax_cost    = $shipping_rate->get_shipping_tax(); // Il costo delle tasse
            $taxes       = $shipping_rate->get_taxes(); // I dettagli delle tasse (array)
        }
    }
}

Ora se la sessione del cliente non è ancora abilitata (il cliente non ha ancora aggiunto alcun prodotto al carrello), devi forzare l'attivazione della sessione cliente di WooCommerce utilizzando il seguente codice:

// Abilita la WC_Session del cliente
add_action( 'init', 'wc_session_enabler' );
function wc_session_enabler() {
    if ( is_user_logged_in() || is_admin() )
        return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }
}

Il codice va nel file functions.php del tuo tema child attivo (o tema attivo).

Se necessario, puoi anche ottenere i metodi di spedizione scelti dal cliente con il seguente codice:

$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
17 feb 2020 15:49:38
Commenti

Sai se WC()->session->get( 'chosen_shipping_methods' ); funziona ancora se è disponibile un solo metodo di spedizione?

Sam Assoum Sam Assoum
25 gen 2021 20:16:38

@SamAssoum Sì, funziona ancora...

LoicTheAztec LoicTheAztec
25 gen 2021 22:05:10

Voglio mostrare il metodo di spedizione selezionato nella sezione Il Mio Ordine che ho creato personalmente, quindi come posso stampare il metodo di spedizione selezionato nella sessione per la sezione Il Mio Ordine?

Ravi Ravi
7 mar 2021 17:09:32