Làm cách nào để sắp xếp lại các trường thanh toán trong mẫu WooC Commerce Checkout? [đóng cửa]


15

Tôi đang tạo biểu mẫu thanh toán kiểu madlib bằng cách sử dụng các trường thanh toán Tùy chỉnh của WooTheme bằng các hành động và bộ lọc .

Các trường thanh toán trong mẫu thanh toán form-billing.phpđược hiển thị với cuộc gọi này:

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

Làm thế nào có thể thay đổi thứ tự các trường xuất hiện?

Trình tự hiện tại (mặc định) lĩnh vực là:
tên đầu tiên
tên cuối cùng
công ty (ẩn đối với tôi)
thị xã / thành phố
mã bưu điện
nước
nhà nước
email
điện thoại

Thứ tự mặc định:
ảnh chụp màn hình

Tôi muốn các lĩnh vực được trong một trật tự tự nhiên hơn cho người Mỹ (nơi tôi sống), vì vậy:
tên đầu tiên
tên cuối cùng
công ty (ẩn đối với tôi)
thị xã / thành phố
bang
mã bưu điện
nước
email
điện thoại

Làm thế nào tốt nhất tôi có thể làm điều này?

Câu trả lời:


28

Điều tương tự có thể được thực hiện thông qua functions.phpchủ đề (con) của bạn:

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;

}

Câu trả lời tốt nhất vì nó sử dụng thực tiễn tốt nhất với wp / wc với việc lọc dữ liệu trước khi nó đến mẫu để không có tệp mẫu nào bị ghi đè.
Larzan

đã không làm việc cho tôi
Yahya Hussein

Điều này sử dụng để làm việc nhưng không còn làm. Tôi nghĩ rằng đó là vì JS thanh toán tự động thay đổi thứ tự.
codekíp

4
Cách hiện tại để thực hiện là gán mức độ ưu tiên: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Xem tại đây https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekíp

5

Cảm ơn Dbranes cho câu trả lời.

Thay thế:

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

Với:

<?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
mã này là từ một chức năng thương mại nội bộ. sử dụng mã của câu trả lời đầu tiên [bộ lọc] sẽ tốt hơn nhiều.
Adeerlike

Đối với tôi nó không hoạt động. Cách tốt nhất là sử dụng "mức độ ưu tiên" của từng trường, đại loại như sau: $ field ['billing'] ['billing_country'] ['ưu tiên'] = 10; $ các trường ['billing'] ['billing_phone'] ['ưu tiên'] = 20; Có thể đó là do các phiên bản mới của Wooc Commerce, nhưng tôi không biết.
ruhanbidart

2

Bạn có thể tạo một bản sao vào chủ đề của mình và chỉnh sửa mẫu biểu hiện biểu mẫu thanh toán.

Chuyển thể từ tài liệu plugin :

Ví dụ
Để ghi đè thông báo đặt hàng của quản trị viên, sao chép: woocommerce/templates/checkout/form-checkout.php
vào
yourtheme/woocommerce/checkout/form-checkout.php

[cập nhật]

Trong tệp này, ngay trước khi các trường được in, có móc hành động này : do_action('woocommerce_before_checkout_billing_form', $checkout);.

Vì vậy, đó chỉ là vấn đề thêm hành động này trong chủ đề functions.phphoặc trong một plugin tùy chỉnh và sắp xếp lại các trường như OP hiển thị trong Câu trả lời của anh ấy. Không cần ghi đè lên mẫu hoặc có nếu cần tùy chỉnh thêm.


Mẫu bạn đề cập chỉ cho phép bạn di chuyển <?php do_action('woocommerce_checkout_billing'); ?>xung quanh bán buôn.
m-torin

Tôi nên đề cập rằng tôi đã không kiểm tra các tập tin plugin thực tế. Trả lời cập nhật và mở rộng nhờ câu trả lời của bạn.
brasofilo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.