¿Cómo reordenar los campos de facturación en la plantilla de Checkout de WooCommerce? [cerrado]

14

Estoy creando un formulario de pago de estilo madlib usando Personalizar los campos de pago mediante acciones y filtros .

Los campos de facturación en la plantilla de pago form-billing.php se muestran con esta llamada:

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

¿Cómo puede cambiar el orden en que aparecen los campos?

El orden actual del campo (predeterminado) es:
nombre de pila
apellido
empresa (escondida para mi)
pueblo / ciudad
código postal
país
estado
correo electrónico
teléfono

Orden por defecto:

Quiero que los campos estén en un orden más natural para los estadounidenses (donde vivo), así que:
nombre de pila
apellido
empresa (escondida para mi)
pueblo / ciudad
estado
código postal
país
correo electrónico
teléfono

¿Cómo puedo hacer esto mejor?

    
pregunta torinagrippa 05.01.2013 - 17:45

3 respuestas

5

Gracias a Dbranes por la respuesta.

Reemplazar:

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

Con:

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

Lo mismo se puede hacer a través de functions.php en su tema (hijo):

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;

}
    
respondido por el Roy Milder 23.12.2013 - 21:10
2

Puede hacer una copia en su tema y editar la plantilla que representa el formulario de pago.

Adaptado de la documentación del complemento :

  

Ejemplo
  Para anular la notificación del pedido de administrador, copie: woocommerce/templates/checkout/form-checkout.php
  a
yourtheme/woocommerce/checkout/form-checkout.php

[update◆

En este archivo, justo antes de que se impriman los campos, hay este gancho de acción: do_action('woocommerce_before_checkout_billing_form', $checkout); .

Por lo tanto, solo es cuestión de agregar esta acción en functions.php del tema o en un complemento personalizado y reordenar los campos como muestra el OP en su Respuesta. No es necesario anular la plantilla, o sí, si se necesitan más personalizaciones.

    
respondido por el brasofilo 05.01.2013 - 22:54

Lea otras preguntas en las etiquetas