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; ?>

フィールドの表示順序を変更するにはどうすればよいですか?

現在の(デフォルトの)フィールドの順序は
次のとおりです。名

会社(私には隠されています)
町/市
郵便番号


メール
電話

デフォルトの順序:
スクリーンショット

私は、フィールドが(私が住んでいる)アメリカ人のために、より自然な順序になりたい:
最初の名前
最後の名前
(私のために隠された)会社
町/都市の
状態
郵便番号

Eメール
電話

どうすればこれを行うことができますか?

回答:


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ベストプラクティスを使用しているため、テンプレートファイルをオーバーライドする必要がないため、ベストアンサーです。
ラルザン

役に立たなかった
ヤヒヤフセイン

これは機能しますが、機能しなくなりました。チェックアウト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機能からのものです。最初の回答のコード[フィルター]を使用する方がはるかに良いでしょう。
アデリアライク

私にとってはうまくいきません。最良の方法は、各フィールドの「優先度」を使用することです。次のようなものです。$ fields ['billing'] ['billing_country'] ['priority'] = 10; $ fields ['billing'] ['billing_phone'] ['priority'] = 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がAnswerに示すようにフィールドを並べ替えるだけです。テンプレートをオーバーライドする必要はありません。または、さらにカスタマイズが必要な場合はあります。


あなたが言及したテンプレートは、あなたが<?php do_action('woocommerce_checkout_billing'); ?>卸売を動き回ることのみを可能にします。
m-トリン

実際のプラグインファイルをチェックしなかったことに言及する必要があります。回答を更新し、回答を拡大しました。
ブラソフィロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.