php css woocommerce calculator shipping

Calculadora de envío de WooCommerce(shipping-calculator.php)-Invalidación de PHP-Código postal únicamente



css (2)

Necesitando algunas sugerencias aquí.

Estoy intentando editar mi calculadora de envío (no la calculadora de pago según https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ )

Estoy revisando el código y no puedo replicar lo que intento lograr como se ve aquí:

Solo quiero ocultar las opciones de estado y país y hacerlo para que solo pueda ingresar un código postal. He intentado lo obvio como ocultarlo en la hoja de estilo CSS / anular solo haciendo que el ancho / largo sea "0".

#add_payment_method .cart-collaterals .cart_totals table select, .woocommerce-cart .cart-collaterals .cart_totals table select, .woocommerce-checkout .cart-collaterals .cart_totals table select { width: 0 height: 0;}

Pero todavía se requiere el estado del país para calcular correctamente. Incluso configuré en la parte trasera de woocommerce para simplemente calcular "1 código postal (por ejemplo: 48081)", por ejemplo, e ingresando solo ese código postal aunque tenga una tarifa asignada, y desafortunadamente eso no sucedió. resuelvelo.

Ahora estoy en el SFTP de mi servidor VIA FileZilla, haciendo una copia de seguridad del archivo shipping-calculator.php y editando en consecuencia y me preguntaba si había algo específico en este código que me ayudaría a lograr eso:

<?php /** * Shipping Calculator * * This template can be overridden by copying it to yourtheme/woocommerce/cart/shipping-calculator.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @author WooThemes * @package WooCommerce/Templates * @version 2.0.8 */ if ( ! defined( ''ABSPATH'' ) ) { exit; // Exit if accessed directly } if ( ''no'' === get_option( ''woocommerce_enable_shipping_calc'' ) || ! WC()->cart->needs_shipping() ) { return; } ?> <?php do_action( ''woocommerce_before_shipping_calculator'' ); ?> <form class="woocommerce-shipping-calculator" action="<?php echo esc_url( wc_get_cart_url() ); ?>" method="post"> <p><a href="#" class="shipping-calculator-button"><?php _e( ''Calculate Shipping'', ''woocommerce'' ); ?></a></p> <section class="shipping-calculator-form" style="display:none;"> <p class="form-row form-row-wide" id="calc_shipping_country_field"> <select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state"> <option value=""><?php _e( ''Select a country&hellip;'', ''woocommerce'' ); ?></option> <?php foreach( WC()->countries->get_shipping_countries() as $key => $value ) echo ''<option value="'' . esc_attr( $key ) . ''"'' . selected( WC()->customer->get_shipping_country(), esc_attr( $key ), false ) . ''>'' . esc_html( $value ) . ''</option>''; ?> </select> </p> <p class="form-row form-row-wide" id="calc_shipping_state_field"> <?php $current_cc = WC()->customer->get_shipping_country(); $current_r = WC()->customer->get_shipping_state(); $states = WC()->countries->get_states( $current_cc ); // Hidden Input if ( is_array( $states ) && empty( $states ) ) { ?><input type="hidden" name="calc_shipping_state" id="calc_shipping_state" placeholder="<?php esc_attr_e( ''State / county'', ''woocommerce'' ); ?>" /><?php // Dropdown Input } elseif ( is_array( $states ) ) { ?><span> <select name="calc_shipping_state" id="calc_shipping_state" placeholder="<?php esc_attr_e( ''State / county'', ''woocommerce'' ); ?>"> <option value=""><?php _e( ''Select a state&hellip;'', ''woocommerce'' ); ?></option> <?php foreach ( $states as $ckey => $cvalue ) echo ''<option value="'' . esc_attr( $ckey ) . ''" '' . selected( $current_r, $ckey, false ) . ''>'' . __( esc_html( $cvalue ), ''woocommerce'' ) .''</option>''; ?> </select> </span><?php // Standard Input } else { ?><input type="text" class="input-text" value="<?php echo esc_attr( $current_r ); ?>" placeholder="<?php esc_attr_e( ''State / county'', ''woocommerce'' ); ?>" name="calc_shipping_state" id="calc_shipping_state" /><?php } ?> </p> <?php if ( apply_filters( ''woocommerce_shipping_calculator_enable_city'', false ) ) : ?> <p class="form-row form-row-wide" id="calc_shipping_city_field"> <input type="text" class="input-text" value="<?php echo esc_attr( WC()->customer->get_shipping_city() ); ?>" placeholder="<?php esc_attr_e( ''City'', ''woocommerce'' ); ?>" name="calc_shipping_city" id="calc_shipping_city" /> </p> <?php endif; ?> <?php if ( apply_filters( ''woocommerce_shipping_calculator_enable_postcode'', true ) ) : ?> <p class="form-row form-row-wide" id="calc_shipping_postcode_field"> <input type="text" class="input-text" value="<?php echo esc_attr( WC()->customer->get_shipping_postcode() ); ?>" placeholder="<?php esc_attr_e( ''Postcode / ZIP'', ''woocommerce'' ); ?>" name="calc_shipping_postcode" id="calc_shipping_postcode" /> </p> <?php endif; ?> <p><button type="submit" name="calc_shipping" value="1" class="button"><?php _e( ''Update Totals'', ''woocommerce'' ); ?></button></p> <?php wp_nonce_field( ''woocommerce-cart'' ); ?> </section> </form> <?php do_action( ''woocommerce_after_shipping_calculator'' ); ?>

EDITAR: (4 horas después de la publicación original)

Cambios que he hecho hasta ahora:

<p class="form-row form-row-wide" id="calc_shipping_country_field"> <select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state"> <option value="US" selected="selected">United States (US)</option> <?php foreach( WC()->countries->get_shipping_countries() as $key => $value ) echo ''<option value="'' . esc_attr( $key ) . ''"'' . selected( WC()->customer->get_shipping_country(), esc_attr( $key ), false ) . ''>'' . esc_html( $value ) . ''</option>''; ?> </select> </p>

^ He actualizado el campo del país con ese código, forzando a los clientes a los EE. UU. Al calcular el envío y puedo ocultar esa entrada directa VIA anulando la estructura CSS de la página. Sé que esto puede ser un largo camino alrededor de la respuesta inicial que necesito, pero actualmente estoy trabajando en esto atentamente. Todo lo que necesito ahora es el código postal para corresponder con el estado correctamente. A menos que alguien sugiera algo completamente diferente.


Código actualizado

Si solo está vendiendo en Estados Unidos, la actualización de su pregunta confirma:

Puede intentar reemplazar la línea 54 en la plantilla de calculadora de envío:
if ( is_array( $states ) && empty( $states ) ) {
por
if ( empty($current_r) ) {

Y la línea 59 reemplaza:
} elseif ( is_array( $states ) ) {
por
} elseif ( false ) {

De esta manera:
1) si el cliente está conectado y se define el estado de envío, se obtiene la información estándar previamente cumplimentada 2) si el cliente no está conectado, se obtiene el campo Hidden imput (vacío).

Pruébalo, ya que no puedo probarlo realmente, porque también depende mucho de la configuración de woocommerce.


Pude resolver el problema actualizando la selección de elección de países inicial SOLAMENTE en los Estados Unidos, así que tenga en cuenta que esto solo funcionará en un solo país para las personas que puedan tropezar con esto editando el código PHP de:

<p class="form-row form-row-wide" id="calc_shipping_country_field"> <select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state"> <option value=""><?php _e( ''Select a country&hellip;'', ''woocommerce'' ); ?></option> <?php foreach( WC()->countries->get_shipping_countries() as $key => $value ) echo ''<option value="'' . esc_attr( $key ) . ''"'' . selected( WC()->customer->get_shipping_country(), esc_attr( $key ), false ) . ''>'' . esc_html( $value ) . ''</option>''; ?> </select> </p>

a

<p class="form-row form-row-wide" id="calc_shipping_country_field"> <select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state"> <option value="US" selected="selected">United States (US)</option> <?php foreach( WC()->countries->get_shipping_countries() as $key => $value ) echo ''<option value="'' . esc_attr( $key ) . ''"'' . selected( WC()->customer->get_shipping_country(), esc_attr( $key ), false ) . ''>'' . esc_html( $value ) . ''</option>''; ?> </select> </p>

Luego, crea una página personalizada para el carrito y anula la hoja de estilo CSS con:

#add_payment_method .cart-collaterals .cart_totals table select, .woocommerce-cart .cart-collaterals .cart_totals table select, .woocommerce-checkout .cart-collaterals .cart_totals table select { width: 0 height: 0;}

Una vez que haya hecho todo esto, debe ir al final y ajustar la configuración de la Zona de envío para reflejar el rango de cada código postal de estado de la siguiente manera: (Quite los estados posteriores, los que estaban allí para referencia).

Zonas de envío - WooCommerce

Otro gran agradecimiento a @LoicTheAztec, aunque por ayudarme, su manera fue inicialmente la respuesta que estaba buscando hacerlo solo a través de PHP, pero me puse vago y ajusté la hoja de estilos de CSS jajaja.