Obține metodele de livrare WooCommerce programatic

16 feb. 2020, 00:28:43
Vizualizări: 36.5K
Voturi: 2

Cum pot să obțin metodele de livrare din magazinul meu WooCommerce? Am următoarea situație pe pagina mea de checkout:

pagina mea de checkout

Iar în panoul de administrare arată așa:

metode de livrare în panoul de administrare WordPress

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

3
Comentarii

Ce rezultat obții când folosești WC()->shipping->get_shipping_methods(); ?

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

@L7c1f3r același rezultat ca în pastebin..

FooBar FooBar
16 feb. 2020 11:53:47

Am testat acum acest lucru și într-adevăr, același rezultat. Dacă mă uit la rezultatul tău și îl compar cu al meu, văd că datele sunt prezente, dar de exemplu 'GLS' lipsește ca method_title, dar 'Flat rate' este afișat acolo, însă la fel este și în rezultatul meu, deci nu este nimic greșit cu asta. 'GLS', se dovedește a fi eticheta. Care este intenția ta finală, ce date vrei să obții și unde vrei să le folosești ulterior?

7uc1f3r 7uc1f3r
16 feb. 2020 22:27:40
Toate răspunsurile la întrebare 1
3

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' );
17 feb. 2020 15:49:38
Comentarii

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

Sam Assoum Sam Assoum
25 ian. 2021 20:16:38

@SamAssoum Da, funcționează...

LoicTheAztec LoicTheAztec
25 ian. 2021 22:05:10

Doresc să afișez metoda de livrare selectată în secțiunea Mea Comandă pe care am creat-o personalizat. Cum pot afișa metoda de livrare selectată din sesiune în secțiunea Mea Comandă?

Ravi Ravi
7 mar. 2021 17:09:32