Un utente ha chiesto informazioni su WooCommerce di Wordpress

WC_Order riceve un prezzo di spedizione dal paese

Un utente ha chiesto 👇

Ciao, sto lottando con questo problema, sto cercando di trovare il costo di spedizione per un ordine generato dinamicamente (creato con wc_create_order), il costo dovrebbe essere basato sull’indirizzo di spedizione del cliente, proprio come un normale wc_order, ho già aggiunto il luogo di spedizione corretto con il mio ordine, ho provato il metodo calc_shipping ma non sembra funzionare.

Qualche spinta?

(@serafinnyc)

1 anno, 9 mesi fa

Come si ottiene la disposizione di spedizione nelle impostazioni?

(@maxpnl)

1 anno, 9 mesi fa

Grazie per la risposta rapida!

Ho alcune zone di spedizione diverse, tutte hanno diversi paesi e hanno una tariffa fissa (diversa da quella che si qualifica per la spedizione gratuita, ma non mi interessa la gestione).

Queste tariffe funzionano come una pila quando un cliente effettua l’ordine dal negozio, ma ogni volta che creo l’ordine le tariffe spedite esternamente non vengono prese in considerazione.

Immagino che mi manchi qualcosa, per quanto ho capito dovrei aggiungere WC_Order_Item_Shipping all’ordine, ma come posso ottenerne il giusto prezzo fisso (in base al paese)?

Grazie.

(@serafinnyc)

1 anno, 9 mesi fa

Se ho capito bene, stai cercando di applicare una tariffa fissa a un paese all’interno di una zona che ha più paesi? È giusto?

(@maxpnl)

1 anno, 9 mesi fa

No, non proprio, forse mi sono spiegato in modo debole.

Fondamentalmente ho alcune zone, chiamiamo Zone1, Zone2, Zone3, FreeShipping, RestOfTheWorld.

Ci sono alcuni paesi in ciascuno di essi, tranne RestOfTheWorld in cui tutti i paesi non sono all’interno delle altre zone.

Ogni volta che un cliente effettua un ordine all’interno del negozio, queste cinture di spedizione verranno utilizzate per calcolare il costo di spedizione, ciascuna di queste zone ha una tariffa fissa diversa, ad esempio:

Crios1: 20 $,
Crios2: $ 30,
Crios3: $ 50,
RestOfTheWorld: $ 80,
Spedizione gratuita: gratuita

Tutto funziona perfettamente all’interno del negozio, ma ogni volta che creo un ordine utilizzando un’API che ho effettuato (che utilizza la funzione wc_create_order) il prezzo di spedizione non viene preso in considerazione.

Vorrei che fosse calcolato in base alla zona di spedizione e messo in ordine, proprio come un normale ordine all’interno del negozio, ma il prezzo di lancio non è mai incluso all’interno di quegli ordini generati dinamicamente, che non importa quello che faccio.

Grazie per il tuo tempo 😀

(@serafinnyc)

1 anno, 9 mesi fa

Ce l’ha fatta. Bene, la tua chiave potrebbe essere rotta o ripristinata. Consiglio di controllare per vedere se qualcosa non è aggiornato. Non so niente.

https://github.com/woocommerce/woocommerce/wiki/Getting-started-with-the-REST-API

Forse @jobthomas sa se è finita.

(@maxpnl)

1 anno, 9 mesi fa

Non sto utilizzando l’API REST di woocommerce, ho creato un’API da solo a causa di alcune esigenze non ero in grado di gestire l’API WC standard, mi sono collegato a wp_init che gestisce la mia API personalizzata.

Ecco il codice che sto creando


    // Retrieving the shipping and billing address from the POST request
    $shipping = json_decode(stripslashes($_POST['shipping']), true);
    $products_ids = json_decode(stripslashes($_POST['products']), true);

    // Adding them to the order
    $order->set_address($shipping, 'shipping');

    if (isset($_POST['billing'])){
        $bill = json_decode(stripslashes($_POST['billing']), true);
        $bill['email'] = $shipping['email'];
    }
    else {
        $bill = $shipping;
    }

    $order->set_address($bill,'billing');

       ............

    // Calculating the order total based on the items inside the cart 
    // (the calculate_shipping doesn't really do much)
    $order->calculate_shipping();
    $order->calculate_totals();

(@maxpnl)

1 anno, 9 mesi fa

Va bene, ho trovato una soluzione, questo è il codice per chiunque abbia problemi simili, non una soluzione pulita ma comunque funziona

function doesthejob(){
	if( class_exists( 'WC_Shipping_Zones' ) ) {
		$all_zones = WC_Shipping_Zones::get_zones();

		$country_code = "CN";

		foreach ($all_zones as $key => $zona) {
			$zone_presenti = $zona['zone_locations'];
			//print_r($zone_presenti);
			foreach ($zone_presenti as $cur_country_code) {
				if ($cur_country_code->code == $country_code){
					//echo $cur_country_code->code;
					//print_r($zona['shipping_methods']);
					foreach ($zona['shipping_methods'] as $key => $value) {
						$instance_id = $key;
						$flat_rate = new WC_Shipping_Flat_Rate($instance_id);
						print_r($flat_rate->cost);
						break;
					}
				}
			}
		}
	}
	return false;
}
add_action('wp_head', 'doesthejob');

Questa risposta è stata modificata 1 anno, 9 mesi fa da.

Was this helpful?

0 / 0

Lascia un commento 0

Your email address will not be published. Required fields are marked *