WooCommerce Checkout 템플릿에서 청구 필드를 재정렬하는 방법은 무엇입니까? [닫은]


15

WooTheme의 조치 및 필터를 사용하여 체크 아웃 필드 사용자 정의를 사용하여 madlib 스타일 체크 아웃 양식을 작성 중입니다 .

결제 템플릿의 결제 필드 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

나를 위해 작동하지 않았다
— 야야 후세인에게

이것은 작동하지만 더 이상 작동하지 않습니다. 체크 아웃 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 [ '청구'] [ '청구 _ 전화'] [ '우선 순위'] = 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.