He creado el siguiente campo de pago personalizado para WooCommerce, basado en todos los ejemplos que se pueden encontrar.

  • Número de casa de facturación billing_houseno
  • Número de casa de envío shipping_houseno

La salida muestra un campo de dirección (calle) y un campo de número de casa. Funciona perfectamente bien. Almacena datos muy bien en un campo de número de casa personalizado y la dirección funciona como normalmente lo hace, por supuesto.

Me gustaría fusionar los siguientes campos en uno:

  • billing_address_1 y billing_houseno en billing_address_1 campo existente.
  • shipping_address_1 y shipping_houseno en shipping_address_1 campo existente.

Por lo tanto, combinará ambos campos en un campo de base de datos.

¿Hay alguna manera de almacenar ambos campos en un campo existente?

2
Juliën 22 ene. 2018 a las 14:36

3 respuestas

La mejor respuesta

Actualización:

En su enlace de código de comentario, hay algunos errores en su código:

1) En su función bones_add_field_and_reorder_fields, está desestabilizando la compañía de facturación y envío, pero después de algunas líneas hacia abajo, está tratando de establecer esos valores en:

$newfields['billing']['billing_company']   = $fields['billing']['billing_company'];
$newfields['shipping']['shipping_company'] = $fields['shipping']['shipping_company'];

Y es arrojar algunos errores ...
Debería no desarmar 'billing_company' y 'shipping_company'.

2) En todas partes que esté utilizando $order->id y debe reemplazarse por $order->get_id().

3) He probado todo con su código actualizado y mi función actualizada a continuación. Funciona ...

Usando una función personalizada enganchada en woocommerce_checkout_update_order_meta enlace de acción, podrá fusionar los valores.

add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order_id ) {
    $separator = '. '; // Separator for merged fields

    // Billing fields
    $billing_address_1 = sanitize_text_field( $_POST['billing_address_1'] );
    $billing_houseno   = sanitize_text_field( $_POST['billing_houseno'] );

    if( ! ( empty($billing_address_1) && empty($billing_houseno) ) )
        update_post_meta( $order_id, '_billing_address_1', $billing_address_1 . $separator . $billing_houseno );

    $shipping_address_1 = sanitize_text_field( $_POST['shipping_address_1'] );
    $shipping_houseno   = sanitize_text_field( $_POST['shipping_houseno'] );

    if( ! ( empty($shipping_address_1) && empty($shipping_houseno) ) )
        update_post_meta( $order_id, '_shipping_address_1', $shipping_address_1 . $separator . $shipping_houseno );
}

El código va en el archivo function.php del tema secundario activo (o tema activo).

Esta vez, esto está probado y funciona.

0
LoicTheAztec 24 ene. 2018 a las 02:45
<?php
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_houseno'] ) ) {
        $billing_houseno = $_POST['billing_houseno'];
        $billing_address_1 = $_POST['billing_address_1'];
        $new_billing_address = $billing_houseno.'.'.$billing_address_1;
        update_post_meta( $order_id, '_billing_address_1', $new_billing_address );
    }
    if(!empty($_POST['shipping_houseno'])){
        $shipping_houseno = $_POST['shipping_houseno'];
        $shipping_address_1 = $_POST['shipping_address_1'];
        $new_shipping_address = $shipping_houseno.'.'.$shipping_address_1;
        update_post_meta( $order_id, '_shipping_address_1', $new_shipping_address );    
    }
}
?>
0
Maulik patel 24 ene. 2018 a las 05:33

Prueba esto

add_action('woocommerce_checkout_update_order_meta', 'customise_checkout_field_update_order_meta',10,2);

function customise_checkout_field_update_order_meta($order_id, $posted_data)
{
//write your code here to update custom data.
}
0
MakeWebBetter 23 ene. 2018 a las 04:28