Как изменить порядок полей оплаты в шаблоне оформления заказа WooCommerce?

5 янв. 2013 г., 18:45:32
Просмотры: 63.7K
Голосов: 15

Я создаю форму оформления заказа в стиле madlib, используя руководство WooThemes по настройке полей оформления заказа с помощью действий и фильтров.

Поля оплаты в шаблоне оформления заказа form-billing.php отображаются с помощью следующего кода:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

Как можно изменить порядок отображения полей?

Текущий (стандартный) порядок полей:
имя
фамилия
компания (скрыто для меня)
город
почтовый индекс
страна
штат
email
телефон

Стандартный порядок:
скриншот порядка полей WooCommerce

Я хочу расположить поля в более привычном для американцев (где я живу) порядке:
имя
фамилия
компания (скрыто для меня)
город
штат
почтовый индекс
страна
email
телефон

Как лучше всего это сделать?

0
Все ответы на вопрос 3
4
31

То же самое можно сделать через файл functions.php в вашей (дочерней) теме:

add_filter("woocommerce_checkout_fields", "order_fields");

function order_fields($fields) {

    $order = array(
        "billing_first_name", 
        "billing_last_name", 
        "billing_company", 
        "billing_address_1", 
        "billing_address_2", 
        "billing_postcode", 
        "billing_country", 
        "billing_email", 
        "billing_phone"

    );
    foreach($order as $field)
    {
        $ordered_fields[$field] = $fields["billing"][$field];
    }

    $fields["billing"] = $ordered_fields;
    return $fields;

}
23 дек. 2013 г. 22:10:01
Комментарии

Лучший ответ, так как использует лучшие практики WP/WC с фильтрацией данных до их попадания в шаблон, поэтому не требуется переопределять файлы шаблонов.

Larzan Larzan
22 авг. 2016 г. 18:19:27

не сработало у меня

Yahya Hussein Yahya Hussein
12 июл. 2017 г. 05:33:16

Раньше это работало, но теперь нет. Думаю, это потому что JS оформления заказа динамически изменяет порядок.

codekipple codekipple
28 июл. 2017 г. 18:43:48

Текущий способ сделать это — назначить приоритет:- $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20;

Смотрите здесь https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/

codekipple codekipple
28 июл. 2017 г. 18:47:01
2

Спасибо Dbranes за ответ.

Замените:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

На:

<?php 
// упорядочите ключи для вашего собственного порядка или удалите ненужные
$mybillingfields=array(
    "billing_first_name",
    "billing_last_name",
    "billing_company",
    "billing_address_1",
    "billing_address_2",
    "billing_city",
    "billing_state",
    "billing_postcode",
    "billing_country",
    "billing_email",
    "billing_phone",
);
foreach ($mybillingfields as $key) : ?>
<?php woocommerce_form_field( $key, $checkout->checkout_fields['billing'][$key], $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>
6 янв. 2013 г. 15:38:57
Комментарии

этот код взят из внутренней функции WooCommerce. использование кода из первого ответа [фильтр] было бы гораздо лучше.

Adeerlike Adeerlike
5 нояб. 2015 г. 18:59:23

У меня это не работает. Лучший способ - использовать "приоритет" каждого поля, примерно так:

$fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20;

Возможно, это связано с новыми версиями WooCommerce, но я не уверен.

ruhanbidart ruhanbidart
17 апр. 2018 г. 01:14:08
2

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

Адаптировано из документации плагина:

Пример
Чтобы переопределить уведомление о заказе в админке, скопируйте: woocommerce/templates/checkout/form-checkout.php
в
yourtheme/woocommerce/checkout/form-checkout.php

[обновление]

В этом файле, непосредственно перед выводом полей, есть хук действия: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Таким образом, достаточно добавить это действие в functions.php темы или в пользовательский плагин и изменить порядок полей, как показано в ответе автора. Нет необходимости переопределять шаблон, если только не требуются дополнительные настройки.

5 янв. 2013 г. 23:54:22
Комментарии

Упомянутый вами шаблон позволяет перемещать <?php do_action('woocommerce_checkout_billing'); ?> только целиком.

MTT MTT
6 янв. 2013 г. 15:30:13

Я должен был упомянуть, что не проверял файлы самого плагина. Ответ обновлен и расширен благодаря вашему ответу.

brasofilo brasofilo
6 янв. 2013 г. 15:54:06