Como reorganizar os campos de faturamento no modelo de checkout do WooCommerce? [fechadas]

14

Estou criando um formulário de check-out do estilo madlib usando o Personalização de campos de checkout usando ações e filtros .

Os campos de faturamento no modelo de check-out form-billing.php são exibidos com esta chamada:

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

Como alterar a ordem em que os campos aparecem?

A ordem de campo atual (padrão) é:
primeiro nome apelido
empresa (escondida para mim)
cidade / cidade zipcode
país
estado
email
telefone

Ordem padrão:

Eu quero que os campos estejam em uma ordem mais natural para os americanos (onde eu moro), então:
primeiro nome apelido
empresa (escondida para mim)
cidade / cidade estado
zipcode
país
email
telefone

Como posso fazer melhor isso?

    
por torinagrippa 05.01.2013 / 17:45

3 respostas

5

Obrigado ao Dbranes pela resposta.

Substituir:

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

Com:

<?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; ?>
    
por torinagrippa 06.01.2013 / 14:38
28

O mesmo pode ser feito através de functions.php em seu tema (filho):

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;

}
    
por Roy Milder 23.12.2013 / 21:10
2

Você pode fazer uma cópia em seu tema e editar o modelo que renderiza o formulário de check-out.

Adaptado da documentação do plug-in :

  

Exemplo
  Para substituir a notificação de pedido do administrador, copie: woocommerce/templates/checkout/form-checkout.php
  para yourtheme/woocommerce/checkout/form-checkout.php

[atualização]

Neste arquivo, logo antes dos campos serem impressos, há esse gancho de ação: do_action('woocommerce_before_checkout_billing_form', $checkout); .

É apenas uma questão de adicionar essa ação no functions.php do tema ou em um plug-in personalizado e reordenar os campos como o OP mostra em sua Resposta. Não há necessidade de substituir o modelo ou sim, se mais personalizações forem necessárias.

    
por brasofilo 05.01.2013 / 22:54