#php #html #jquery #wordpress #woocommerce
#php #HTML #jquery #wordpress #woocommerce
Вопрос:
У меня есть этот код, который печатает страну доставки, выбранную пользователем на странице оформления заказа woocommerce (форма доставки). Это работает нормально, значение печатается при загрузке страницы оформления заказа.
Но затем, если пользователь изменяет выбранную страну в списке выбора (в форме доставки), напечатанное значение страны устареет. Существует событие ajax, которое обновляет стоимость доставки и т. Д. Но мое значение не обновляется.
Вопрос: есть ли способ снова вызвать «действие», когда пользователь вносит изменения в форму доставки?
<?php
add_action( 'woocommerce_checkout_before_order_review', 'action_woocommerce_checkout_before_order_review', 10, 0 );
function action_woocommerce_checkout_before_order_review () {
echo $country = WC()->customer->get_shipping_country();
}
Комментарии:
1. Для обновления полей доставки требуется использование Ajax…
2. @LoicTheAztec как мне начать добавлять прослушиватель для вызова ajax?
3. @LoicTheAztec просто сообщаю вам, что я только что запустил награду за этот вопрос. Спасибо.
Ответ №1:
Наконец, Ajax не требуется, просто добавив окружающий html-тег к отображаемой стране и используя немного jQuery, вы можете обновить отображаемый код страны доставки следующим образом:
add_action( 'woocommerce_checkout_before_order_review', 'action_woocommerce_checkout_before_order_review' );
function action_woocommerce_checkout_before_order_review () {
echo '<span class="the_shipping_country">'. WC()->customer->get_shipping_country() . '</span>';
}
// JQuery code
add_action( 'wp_footer', 'checkout_shipping_country_refresh_display' );
function checkout_shipping_country_refresh_display() {
// On checkout
if ( is_checkout() amp;amp; ! is_wc_endpoint_url() ) :
?><script type="text/javascript">
jQuery( function($){
// Shipping fias code change amp; input events
$(document.body).on( 'change', 'select[name=shipping_country]', function() {
$('.the_shipping_country').html($(this).val());
console.log($(this).val());
});
});
</script>
<?php
endif;
}
Ввод кода functions.php файл активной дочерней темы (или активной темы). Протестировано и работает.