Pregunta sobre WooCommerce de Wordpress:

WC_Order recibe un precio de envío del país

Un usuario preguntó 👇

Hola, estoy luchando con este problema, estoy tratando de encontrar el costo de envío para un pedido generado dinámicamente (creado con wc_create_order), el costo debe basarse en la dirección de envío del cliente, al igual que un wc_order normal, Ya agregué el lugar de envío correcto con mi pedido, probé el método calc_shipping pero parece que no funciona.

¿Algún empujón?

(@serafinnyc)

Hace 1 año, 8 meses

¿Cómo establece su arreglo de envío?

(@maxpnl)

Hace 1 año, 8 meses

¡Gracias por la rápida respuesta!

Tengo algunas zonas de envío diferentes, todas tienen varios países y tienen una tarifa plana (excepto una que califica para envío gratuito, pero no me importa el manejo).

Estas tarifas funcionan como una pila cuando un cliente realiza el pedido desde la tienda, pero cada vez que creo el pedido, las tarifas enviadas externamente no se tienen en cuenta.

Supongo que me falta algo, por lo que tengo entendido, debería agregar WC_Order_Item_Shipping al pedido, pero ¿cómo obtengo el precio fijo correcto (según el país)?

Gracias.

(@serafinnyc)

Hace 1 año, 8 meses

Si le entiendo correctamente, ¿está tratando de poner una tarifa plana en un país dentro de una Zona que tiene varios países? ¿Está bien?

(@maxpnl)

Hace 1 año, 8 meses

No, en realidad no, tal vez me expliqué de una manera débil.

Básicamente, tengo algunas zonas, llamemos Zone1, Zone2, Zone3, FreeShipping, RestOfTheWorld.

Hay algunos países en cada uno de ellos, excepto RestOfTheWorld donde todos los países no están dentro de las otras zonas.

Siempre que un cliente haga un pedido dentro de la tienda, estos cinturones de envío se utilizarán para calcular su costo de envío, cada una de estas zonas tiene una tarifa plana diferente, por ejemplo:

Zone1: $ 20, Zone2: $ 30, Zone3: $ 50, RestOfTheWorld: $ 80, Envío gratuito: Gratis

Todo funciona perfectamente dentro de la tienda, pero cada vez que creo un pedido usando una API que hice (que usa la función wc_create_order) no se tiene en cuenta el precio de envío.

Me gustaría que se calcule en función de la zona de envío y se ponga en orden, como un pedido normal dentro de la tienda, pero el precio de lanzamiento nunca se incluye dentro de esos pedidos que se generan dinámicamente, es no importa lo que yo haga.

Gracias por tu tiempo 😀

(@serafinnyc)

Hace 1 año, 8 meses

Él lo consiguió. Bueno, su clave puede estar rota o reiniciada. Recomiendo comprobar si hay algo desactualizado. No sé nada.

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

Quizás @jobthomas sepa si se acabó.

(@maxpnl)

Hace 1 año, 7 meses

No estoy usando la API REST de woocommerce, hice una API yo mismo debido a algunas necesidades. No pude manejar la API WC estándar, me conecté a wp_init que maneja mi API personalizada.

Aquí está el código que estoy haciendo


    // 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)

Hace 1 año, 7 meses

De acuerdo, encontré una solución, este es el código para cualquier persona con problemas similares, no una solución limpia pero aún así, funciona

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

Esta respuesta fue modificada hace 1 año, 7 meses.

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.