WooCommerce 2.1 Detectar método de envío elegido

3 minutos de lectura

He estado usando lo siguiente para decidir si un campo de pago debe estar completo o no…

if ($posted['shipping_method'] == "local_pickup_plus") {
}

Desde que actualicé a WooCommerce 2.1, mi código ya no funciona.

Intenté repetir el valor almacenado en $posted[‘shipping_method’] para ver si lo estoy comparando con el valor correcto, pero parece que ya no hay nada almacenado en esta variable.

He estado buscando otros métodos para verificar el método de envío elegido, pero no avanzo mucho.

Cualquier ayuda sería muy apreciada.

Estuve buscando esto durante un par de horas, luego decidí profundizar en los archivos de WooCommerce…

Esto parece estar funcionando para mí:

 $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
 $chosen_shipping = $chosen_methods[0]; 

Estoy usando esto para establecer un total mínimo para la entrega local usándolo así en mis funciones.php

add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;


if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

 $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
 $chosen_shipping = $chosen_methods[0]; 

 $min_spend = 25;
 $cart_total = $woocommerce->cart->cart_contents_total;
 if (($cart_total < 25) AND ($chosen_shipping == 'local_delivery')) {   
    $surcharge = $min_spend-$cart_total;    
    $woocommerce->cart->add_fee( 'Delivery Surchage', $surcharge, true, 'standard' );
}

}

Espero que esto ayude a alguien.

  • Aún trabajando. ¡Gracias!

    – Brad El Pez Azul

    20 sep 2021 a las 18:27

  • Esto funciona de alguna manera, pero algunas cosas: no suele usar $ woocommerce global cuando puede obtener la misma información de WC() mira aquí: businessbloomer.com/… Además, el valor devuelto por “chosen_shipping_methods” no es una coincidencia exacta, pero contiene el nombre del método de envío, por lo que tendría que hacer strpos y no ===

    – Urías Víctor

    26/09/2021 a las 19:40

Desde el código fuente del WooCommerce 2.1:

$this->posted['shipping_method'] = isset( $_POST['shipping_method'] ) ? $_POST['shipping_method'] : '';

Entonces si la variable $_POST['shipping_method'] no está configurado, entonces $posted['shipping_method'] será una cadena vacía. Mi conjetura es que su form no tiene el method atributo establecido en post (se omite tal vez o intenta usar enlaces para el envío del producto, no el form).

  • Gracias por su respuesta. El atributo del método de formularios está configurado para publicar. El formulario en cuestión es WooCommerce Checkout.

    – usuario1503689

    13 de marzo de 2014 a las 16:46

  • He estado intentando ‘$test = $posted[‘shipping_method’]; $woocommerce->add_error( __(‘El método de envío seleccionado es’ . $prueba) );’ y el área del mensaje de error solo tiene impreso “El método de envío seleccionado es”.

    – usuario1503689

    13 de marzo de 2014 a las 16:47

  • Ahora estoy empezando a pensar que es la prioridad en la que se agrega el código… ‘add_action(‘woocommerce_after_checkout_validation’, ‘validate_collection_date’, 20, 1);’ así que tendrá que investigar esto más a fondo.

    – usuario1503689

    13 de marzo de 2014 a las 17:02

  • Si encuentra un error en WooCommerce, es mejor publicarlo en el rastreador de problemas allí, para que los desarrolladores puedan solucionarlo.

    – Bud Damyanov

    14 de marzo de 2014 a las 7:53

  • Lo haré… Gracias por su ayuda.

    – usuario1503689

    14 de marzo de 2014 a las 9:29


$_POST[‘shipping_method’] es una matriz, $lo que sea = $_POST[‘shipping_method’]$ lo que sea[0] = valor

¿Ha sido útil esta solución?