На странице проверки доставки Woocommerce сначала указывается адрес доставки, а затем адрес выставления счета?

На странице проверки Woocommerce мне нужно изменить функциональность адресных средств, сначала мне нужны поля адреса доставки, а затем поля адреса фактуры.

Сначала отображается биллинг, а затем доставка отображается, если флажок установлен, как показано ниже, см. изображение.

Сначала адрес фактуры

enter image description here

теперь мне нужно изменить его, как первый адрес доставки, когда я поставлю флажок, он показывает мне платежный адрес. см. ниже изображение.

Первый адрес доставки

enter image description here

Мне нужно это изменение без изменения каких-либо файлов файлов woocommerce в папке с темами, также необходима проверка и эффект jquery.

Может ли какой-нибудь plz помочь мне сделать это?

заранее спасибо

фрагменты кода: это не решение, поэтому plz не записывает это, потому что он меняет место, а не функциональность и флажок. plz см. снимок экрана, который я пишу.

Сначала адрес фактуры

<?php do_action( 'woocommerce_checkout_billing' ); ?>
<?php do_action( 'woocommerce_checkout_shipping' ); ?>

Первый адрес доставки

<?php do_action( 'woocommerce_checkout_shipping' ); ?>
<?php do_action( 'woocommerce_checkout_billing' ); ?>

все еще этот вопрос не решен, jquery не является хорошим решением для этого, потому что checkout запускается как ajax и validation. если у кого-то есть хорошее решение, тогда предоставляйте, чтобы другие могли помочь здесь.

Ответ 1

Если вы используете дочернюю тему, это можно сделать легко.

ШАГОВ:

1) Скопируйте form-checkout.php из wp-content->plugins->woocommerce->templates->checkout и вставьте его внутри wp-content\themes\your_theme\woocommerce\myaccount.

2) Измените это

<div class="col2-set" id="customer_details">
     <div class="col-1">
          <?php do_action( 'woocommerce_checkout_billing' ); ?>
     </div>

      <div class="col-2">
           <?php do_action( 'woocommerce_checkout_shipping' ); ?>
       </div>
</div>

к

<div class="col2-set" id="customer_details">
     <div class="col-1">
          <?php do_action( 'woocommerce_checkout_shipping' ); ?>    
     </div>

      <div class="col-2">
           <?php do_action( 'woocommerce_checkout_billing' ); ?>               
       </div>
</div>

ПРИМЕЧАНИЕ. Это решение работает только с дочерней темой.

Ответ 2

Ваше требование было уникальным, сложным и сложным. Так что попробовал код для достижения цели.

Чтобы достичь такой функциональности, все кодирование было выполнено в jQuery, поэтому сначала убедитесь в том, что вы попытаетесь сделать то же самое в консоли, а затем после успешной работы того же кода добавьте код в любой js, который загружается на странице проверки или добавляет ваш js для страницы проверки.

jQuery('.shipping_address').css('display','block');

var bigHtml = jQuery(".woocommerce-billing-fields").children().not("h3, .create-account").detach();
var smallHtml = jQuery('.shipping_address').detach();
jQuery('.woocommerce-billing-fields').append(smallHtml);
jQuery('#order_comments_field').before(bigHtml);

jQuery('.woocommerce-billing-fields h3').text('Shipping Details');
jQuery('h3#ship-to-different-address').replaceWith('<h3 id="ship-to-billing-different-address"><label for="ship-to-billing-different-address-checkbox" class="checkbox">Ship to billing address?</label><input id="ship-to-billing-different-address-checkbox" class="input-checkbox" name="ship_to_different_billing_address" value="1" type="checkbox"></h3>');
jQuery(".woocommerce-shipping-fields").children().not("h3,#order_comments_field").hide();

jQuery("#ship-to-billing-different-address-checkbox").click(function(event) {
    if (jQuery(this).is(":checked"))
        jQuery(".woocommerce-shipping-fields").children().not("h3,#order_comments_field").show();
    else
        jQuery(".woocommerce-shipping-fields").children().not("h3,#order_comments_field").hide();
});

Я надеюсь, что мое время и работа, отправленные в этом выпуске, будут работать и выполнять ваши требования.

Ответ 3

Если вы уже знаете, как использовать шаблоны woocommerce, то самый простой способ сделать это без необходимости переделки всего кода бэкэнда и без необходимости переписывать jquery - это сделать копии трех шаблонов woocommerce для модификации. Это для модификации стандартных шаблонов woocommerce.

оформить заказ> form-checkout.php

оформить заказ> form-billing.php

оформить заказ> form-shipping.php

Изменения, которые необходимо внести в каждый шаблон:

оформить заказ> form-checkout.php

move <?php do_action( 'woocommerce_checkout_billing' );?> <?php do_action( 'woocommerce_checkout_billing' );?> в строке 40 в строку 44 и переместите <?php do_action( 'woocommerce_checkout_shipping' );?> <?php do_action( 'woocommerce_checkout_shipping' );?> от строки 44 до строки 40.

Теперь на двух других шаблонах произойдет обмен кода.

из оформления заказа> form-billing.php

в строке 29 изменить <?php _e( 'Billing &amp; Shipping', 'woocommerce' );?> <?php _e( 'Billing &amp; Shipping', 'woocommerce' );?> to <?php _e( 'Shipping &amp; Billing', 'woocommerce' );?> <?php _e( 'Shipping &amp; Billing', 'woocommerce' );?>

в строке 33 изменить <?php _e( 'Billing details', 'woocommerce' );?> <?php _e( 'Billing details', 'woocommerce' );?> to <?php _e( 'Shipping details', 'woocommerce' );?> <?php _e( 'Shipping details', 'woocommerce' );?>

Вот где происходит обмен кода:

Теперь обрежьте строки с 27 по 35 и вставьте их в оформление заказа> form-shipping.php в строке 25. Не теряйте свое место в строках оформления заказа> form-shipping.php. Вам нужно будет обрезать строки с 25 по 33 и вставить их в оформление заказа. > form-billing.php в строке 27.

ПРИМЕЧАНИЕ: это обмен кодами на обоих шаблонах

должно быть выше этого <?php do_action( 'woocommerce_before_checkout_billing_form', $checkout );?> <?php do_action( 'woocommerce_before_checkout_billing_form', $checkout );?> при оформлении заказа> шаблон form-billing.php и выше <?php do_action( 'woocommerce_before_checkout_shipping_form', $checkout );?> <?php do_action( 'woocommerce_before_checkout_shipping_form', $checkout );?> при оформлении заказа> шаблон form-shipping.php.

Теперь из checkout> form-billing.php отрежьте строки с 55 по 82 и вставьте в checkout> form-shipping.php в строке 77.

Теперь из checkout> form-shipping.php вырежьте строки с 52 по 54 и вставьте checkout> form-billing.php в строку 53. Это должно быть между тем, что находится в строках 52 и 53 шаблона по умолчанию.

Последним шагом будет изменение текста во входных данных для флажка, который теперь должен быть в строке 31 checkout> form-billing.php, если вы строго следовали этому.

Вы можете скопировать и заменить строку 31 следующим текстом:

<input id="ship-to-different-address-checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" <?php checked( apply_filters( 'woocommerce_ship_to_different_address_checked', 'shipping' === get_option( 'woocommerce_ship_to_destination' ) ? 1 : 0 ), 1 ); ?> type="checkbox" name="ship_to_different_address" value="1" /> <span><?php _e( 'Bill to a different address?', 'woocommerce' ); ?></span>

Последнее замечание о jquery woocommerce, которое заставляет поля появляться из флажка

Jquery работает со следующим элементом, который теперь должен быть в строке checkout> form-billing.php 35. <div class="shipping_address">