Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

277
Vistas
Cantidad mínima de pedido según el código postal y el método de envío en WooCommerce

¿Cómo puedo establecer un monto mínimo de pedido solo para Entrega/Envíos (pero no para retiro local) y dependiendo de códigos postales específicos?

Caso de uso: un restaurante realiza entregas en el pueblo local sin una cantidad mínima. Pero los pueblos vecinos deben tener una cantidad de pedido. La recogida es siempre sin importe mínimo.

Basado en el monto mínimo del pedido, excepto por el método de envío específico en el código de respuesta de WooCommerce , este es mi intento:

 add_action( 'woocommerce_check_cart_items', 'wc_minimum_required_order_amount' ); function wc_minimum_required_order_amount() { // HERE Your settings $minimum_amount = 50; // The minimum cart total amount $shipping_method_id = 'local_pickup'; // The targeted shipping method Id (exception) $postcodes = array('82065', '82057', '82067'); // Define your targeted postcodes in the array $postcode = '82069'; // Initializing // Get some variables $cart_total = (float) WC()->cart->total; // Total cart amount $chosen_methods = (array) WC()->session->get( 'chosen_shipping_methods' ); // Chosen shipping method rate Ids (array) // Only when a shipping method has been chosen if ( ! empty($chosen_methods) ) { $chosen_method = explode(':', reset($chosen_methods)); // Get the chosen shipping method Id (array) $chosen_method_id = reset($chosen_method); // Get the chosen shipping method Id } // If "Local pickup" shipping method is chosen, exit (no minimun is required) if ( isset($chosen_method_id) && $chosen_method_id === $shipping_method_id ) { return; // exit } if ( isset($_POST['shipping_postcode']) && ! empty($_POST['shipping_postcode']) ) { $postcode = $_POST['shipping_postcode']; if ( empty($postcode) && isset($_POST['billing_postcode']) && ! empty($_POST['billing_postcode']) ) { $postcode = $_POST['billing_postcode']; } } elseif ( $postcode = WC()->customer->get_shipping_postcode() ) { if ( empty($postcode) ) { $postcode = WC()->customer->get_billing_postcode(); } } // Add an error notice is cart total is less than the minimum required if ( $cart_total < $minimum_amount && ! empty($postcode) && in_array( $postcode, $postcodes ) ) { wc_add_notice( sprintf( __("The minimum required order amount is %s (your current order amount is %s).", "woocommerce"), // Text message wc_price( $minimum_amount ), wc_price( $cart_total ) ), 'error' ); } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Está cerca de su solución, lo que falta, sin embargo, es el uso de in_array() , con el que puede verificar el código postal

Entonces obtienes:

 function action_woocommerce_check_cart_items() { // HERE Your settings $minimum_amount = 50; // The minimum cart total amount $shipping_method_id = 'local_pickup'; // The targeted shipping method Id (exception) $postcodes = array( 82065, 82057, 82067, 9800 ); // Define your targeted postcodes in the array // Get some variables $cart_total = (float) WC()->cart->total; // Total cart amount $chosen_methods = (array) WC()->session->get( 'chosen_shipping_methods' ); // Chosen shipping method rate Ids (array) // Initialize $postcode = ''; // Only when a shipping method has been chosen if ( ! empty($chosen_methods) ) { $chosen_method = explode( ':', reset( $chosen_methods ) ); // Get the chosen shipping method Id (array) $chosen_method_id = reset( $chosen_method ); // Get the chosen shipping method Id } // If "Local pickup" shipping method is chosen, exit (no minimun is required) if ( isset($chosen_method_id) && $chosen_method_id === $shipping_method_id ) { return; // exit } // Get shipping postode $postcode = WC()->customer->get_shipping_postcode(); // When empty if ( empty ( $postcode ) ) { if ( isset( $_POST['shipping_postcode'] ) ) { $postcode = $_POST['shipping_postcode']; } else { if ( isset( $_POST['billing_postcode'] ) ) { $postcode = $_POST['billing_postcode']; } else { $postcode = WC()->customer->get_billing_postcode(); } } } // Still empty, exit if ( empty ( $postcode ) ) return; // Add an error notice is cart total is less than the minimum required and postcode occurs in the array if ( $cart_total < $minimum_amount && in_array( $postcode, $postcodes ) ) { // Your error message wc_add_notice( sprintf( __( 'The minimum required order amount is %s (your current order amount is %s).', 'woocommerce' ), // Text message wc_price( $minimum_amount ), wc_price( $cart_total ) ), 'error' ); // Optional: remove proceed to checkout button remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 ); } } add_action( 'woocommerce_check_cart_items' , 'action_woocommerce_check_cart_items', 10, 0 );
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda