Ottenere i metodi di spedizione WooCommerce programmaticamente
Come posso recuperare i metodi di spedizione nel mio negozio WooCommerce? Ho questo nella mia pagina di checkout:
E all'interno del mio pannello amministrativo appare così:
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

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' );

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