Obține metodele de livrare WooCommerce programatic
Cum pot să obțin metodele de livrare din magazinul meu WooCommerce? Am următoarea situație pe pagina mea de checkout:
Iar în panoul de administrare arată așa:
Am încercat să folosesc:
WC()->shipping->load_shipping_methods()
Dar nu returnează textul/prețul pentru GLS sau Click and collect. Returnează aceste date: https://paste.laravel.io/0c1aff96-dbed-452c-856f-6d62b6f1f47e

Trebuie să folosești ceva diferit, după cum urmează (comentat):
// Parcurge pachetele de livrare din WC_Session (pot fi multiple în unele cazuri)
foreach ( WC()->cart->get_shipping_packages() as $package_id => $package ) {
// Verifică dacă există o metodă de livrare pentru pachetul curent
if ( WC()->session->__isset( 'shipping_for_package_'.$package_id ) ) {
// Parcurge metodele de livrare pentru pachetul curent
foreach ( WC()->session->get( 'shipping_for_package_'.$package_id )['rates'] as $shipping_rate_id => $shipping_rate ) {
$rate_id = $shipping_rate->get_id(); // același lucru ca variabila $shipping_rate_id (combinație între metoda de livrare și ID-ul instanței)
$method_id = $shipping_rate->get_method_id(); // Slug-ul metodei de livrare
$instance_id = $shipping_rate->get_instance_id(); // ID-ul instanței
$label_name = $shipping_rate->get_label(); // Numele afișat al metodei
$cost = $shipping_rate->get_cost(); // Costul fără taxe
$tax_cost = $shipping_rate->get_shipping_tax(); // Costul taxei
$taxes = $shipping_rate->get_taxes(); // Detalii despre taxe (array)
}
}
}
Acum, dacă sesiunea clientului nu este încă activată (clientul nu a adăugat încă niciun produs în coș), trebuie să forțezi activarea sesiunii WooCommerce pentru client folosind următorul cod:
// Activează WC_Session pentru client 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 ); } }
Codul se adaugă în fișierul functions.php al temei child active (sau al temei active).
Dacă este necesar, poți obține și metoda/metodele de livrare alese de client cu următorul cod:
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

Știi dacă WC()->session->get( 'chosen_shipping_methods' ); funcționează în continuare dacă există doar o singură metodă de livrare disponibilă?
