Как изменить порядок выставления счетов в шаблоне WooCommerce Checkout? [закрыто]


15

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

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

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

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

Текущий (по умолчанию) порядок полей:
имя, фамилия,
название
компании (скрыто для меня)
город / город
почтовый индекс
страна-
государство
электронная почта
телефон

Порядок по умолчанию:
Скриншот

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

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

Ответы:


28

То же самое можно сделать 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;

}

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

у меня не получилось
Яхья Хусейн

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

4
Текущий способ сделать это - назначить приоритет: - $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 от

5

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

Заменить:

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

С:

<?php 
// order the keys for your custom ordering or delete the ones you don't need
$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; ?>

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

Для меня это не работает. Лучший способ - использовать «приоритет» каждого поля, например, так: $ fields ['billing'] ['billing_country'] ['priority'] = 10; $ fields ['billing'] ['billing_phone'] ['priority'] = 20; Может быть, это из-за новых версий Woocommerce, но я не знаю.
Руханбидарт

2

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

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

Пример
Для overide уведомления администратора заказа, копия: woocommerce/templates/checkout/form-checkout.php
в
yourtheme/woocommerce/checkout/form-checkout.php

[Обновить]

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

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


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

Я должен был упомянуть, что я не проверял фактические файлы плагина. Ответ обновляется и расширяется благодаря вашему ответу.
brasofilo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.