Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

278
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda