WooCommerce Checkout şablonundaki faturalandırma alanları nasıl yeniden sıralanır? [kapalı]


15

Eylemleri ve filtreleri kullanarak WooTheme'in Özelleştirme ödeme alanlarını kullanarak bir madlib tarzı ödeme formu oluşturuyorum .

Ödeme şablonundaki faturalandırma alanları form-billing.phpbu çağrı ile görüntülenir:

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

Alanların görünme sırasını nasıl değiştirebilirim?

Geçerli (varsayılan) saha sırası:
ad
soyad
şirket (benim için gizli)
şehir / şehir
posta kodu
ülke
devlet
e-posta
telefonu

Varsayılan sipariş:
ekran görüntüsü

Alanların Amerikalılar için daha doğal bir düzende olmasını istiyorum (yaşadığım yer), bu yüzden:
ad
soyad
şirket (benim için gizli)
şehir / şehir
devlet
posta kodu
ülke
e-posta
telefonu

Bunu en iyi nasıl yapabilirim?

Yanıtlar:


28

Aynı şey functions.php(çocuk) temanızda da yapılabilir:

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;

}

En iyi yanıt, şablona ulaşmadan önce verileri filtrelemek için wp / wc en iyi uygulamasını kullandığından, hiçbir şablon dosyasının geçersiz kılınması gerekmez.
Larzan

benim için çalışmadı
Yahya Hüseyin

Bu kullanım işe yarıyor ama artık çalışmıyor. Bence ödeme JS dinamik olarak siparişi değiştirir.
codekipple

4
Bunu yapmanın şu anki yolu bir öncelik atamaktır: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Buraya bakınız https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple

5

Cevap için Dbranes'a teşekkürler.

Değiştir:

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

İle:

<?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
bu kod dahili bir Woocommerce işlevinden. ilk yanıt kodunu [bir filtre] kullanmak çok daha iyi olur.
Adeerlike

Benim için işe yaramıyor. En iyi yol, her alanın "önceliği" ni kullanmaktır, örneğin: $ fields ['billing'] ['billing_country'] ['öncelik'] = 10; $ fields ['billing'] ['billing_phone'] ['öncelik'] = 20; Belki Woocommerce'ın yeni sürümleri yüzünden, ama bilmiyorum.
ruhanbidart

2

Temanıza bir kopya oluşturabilir ve ödeme formunu oluşturan şablonu düzenleyebilirsiniz.

Eklenti belgelerinden uyarlanmıştır :

Örnek
için, yönetici sipariş bildirimi overide kopyalayın: woocommerce/templates/checkout/form-checkout.php
hiç
yourtheme/woocommerce/checkout/form-checkout.php

[Güncelleme]

Bu dosyada, alanlar yazdırılan hemen önce, bu eylem kanca var: do_action('woocommerce_before_checkout_billing_form', $checkout);.

Bu nedenle, bu eylemi temanın functions.phpveya özel bir eklentiye eklemek ve OP'nin Yanıtında gösterildiği gibi alanları yeniden sıralamak önemlidir . Şablonu geçersiz kılmaya gerek yok veya daha fazla özelleştirme gerekiyorsa evet.


Bahsettiğiniz şablon sadece <?php do_action('woocommerce_checkout_billing'); ?>toptan dolaşmanıza izin verir .
m-torin

Gerçek eklenti dosyalarını kontrol etmediğimi belirtmeliydim. Cevabınız sayesinde cevap güncellendi ve genişletildi.
Brasofilo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.