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.