Як змінити порядок виставлення рахунків у шаблоні 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.