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


15

Estoy creando un formulario de pago estilo madlib usando los campos de pago del Customizing de WooTheme usando acciones y filtros .

Los campos de facturación en la plantilla de pago form-billing.phpse 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 de campo actual (predeterminado) es:
nombre
apellido
compañía (oculto para mí)
pueblo / ciudad
código postal
país
estado
correo electrónico
teléfono

Orden predeterminado:
captura de pantalla

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

¿Cómo puedo hacer esto mejor?

Respuestas:


28

Lo mismo puede hacerse a través functions.phpde 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;

}

La mejor respuesta, ya que utiliza las mejores prácticas de wp / wc para filtrar los datos antes de que lleguen a la plantilla, por lo que no se debe anular ningún archivo de plantilla.
— Larzan

no funcionó para mí
— Yahya Hussein

Esto solía funcionar pero ya no funciona. Creo que es porque el pago JS altera dinámicamente el orden.
— codekipple

44
La forma actual de hacerlo es asignar una prioridad: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; Vea aquí https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
— codekipple

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

2
Este código es de una función interna de Woocommerce. usar el código de la primera respuesta [un filtro] sería mucho mejor.
— Adeerlike

Para mi no funciona. La mejor manera es usar la "prioridad" de cada campo, algo como esto: $ fields ['billing'] ['billing_country'] ['priority'] = 10; $ campos ['facturación'] ['billing_phone'] ['prioridad'] = 20; Quizás sea por las nuevas versiones de Woocommerce, pero no lo sé.
— ruhanbidart

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 de orden de administrador, copie: woocommerce/templates/checkout/form-checkout.php
a
yourtheme/woocommerce/checkout/form-checkout.php

[actualizar]

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

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


La plantilla que mencionó solo le permite moverse <?php do_action('woocommerce_checkout_billing'); ?>al por mayor.
— m-torin

Debería haber mencionado que no revisé los archivos del complemento real. Respuesta actualizada y ampliada gracias a su respuesta.
— brasofilo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.