จะจัดลำดับฟิลด์การเรียกเก็บเงินใหม่ในเทมเพลต 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 ด้วยการกรองข้อมูลก่อนที่จะถึงเทมเพลตดังนั้นจึงไม่มีการแทนที่ไฟล์เทมเพลต
Larzan

ไม่ทำงานสำหรับฉัน
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

ขอบคุณ 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; $ field ['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หรือในปลั๊กอินที่กำหนดเองและเรียงลำดับฟิลด์ตามที่ OP แสดงในคำตอบของเขา ไม่จำเป็นต้องลบล้างเทมเพลตหรือใช่หากต้องการการปรับแต่งเพิ่มเติม


เทมเพลตที่คุณกล่าวถึงอนุญาตให้คุณย้าย<?php do_action('woocommerce_checkout_billing'); ?>ไปที่ขายส่งเท่านั้น
m-torin

ฉันควรจะพูดถึงว่าฉันไม่ได้ตรวจสอบไฟล์ปลั๊กอินจริง ตอบปรับปรุงและขยายตัวขอบคุณคำตอบของคุณ
brasofilo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.