¿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.