Як змінити порядок виставлення рахунків у шаблоні WooCommerce Checkout? [зачинено]


15

Я створюю форму оформлення замовлення в стилі мадліб, використовуючи налаштування каси 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 з фільтруванням даних до того, як вони дістаються до шаблону, тому жоден файл шаблону не повинен бути перекритий.
Ларзан

не працював для мене
Yahya Hussein

Це використовувати для роботи, але більше не робить. Я думаю, це тому, що каси 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

Дякую Дбраунс за відповідь.

Замінити:

<?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

Для мене це не працює. Найкращий спосіб - використовувати «пріоритет» кожного поля, приблизно так: $ polja ['billing'] ['billing_country'] ['пріоритет'] = 10; $ polja ['billing'] ['billing_phone'] ['пріоритет'] = 20; Можливо, це через нові версії Woocommerce, але я не знаю.
ruhanbidart

2

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

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

Приклад
Щоб перекрити сповіщення адміністратора про замовлення, скопіюйте: 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'); ?>оптом.
m-torin

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