¿Cómo mostrar campos personalizados en pedidos de WooCommerce en el panel de administración?

21 ene 2016, 13:48:10
Vistas: 91.9K
Votos: 16

Actualmente he agregado un campo personalizado de facturación en WooCommerce usando:

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Teléfono 2', 'woocommerce'),
    'placeholder'  => _x('Teléfono 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

Necesito editar el valor de este campo en el área de administración. Actualmente puedo editar todos los demás valores en la dirección de facturación pero este valor no aparece en la sección de administración. Uso el siguiente código solo para ver el valor en la sección de admin:

function order_phone_backend($order){
    echo "<p><strong>Teléfono de facturación 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

add_action( 'woocommerce_admin_order_data_after_billing_address', 'order_phone_backend', 10, 1 );

He leído la documentación https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/. Todo en este documento funciona correctamente excepto que billing_phone/Teléfono no se ve bajo Campos personalizados. He verificado las opciones de pantalla y ya tengo marcado Campos personalizados. Otros campos personalizados y sus valores son visibles y editables.

¿Cómo puedo editar este valor en el backend? Por favor ayuda.

2
Comentarios

El primer bloque de código en tu pregunta modifica el campo predeterminado 'Teléfono'. No añade ningún nuevo campo al formulario de pago. Los campos de pago no estarán disponibles bajo "campos personalizados", así que no los busques allí. Si deseas editar cualquier campo de la dirección de facturación o envío, ve al backend y haz clic en cualquier pedido bajo la lista de pedidos. Luego verás un pequeño ícono de edición junto a los encabezados 'Detalles de Facturación' y 'Detalles de Envío'. Hacer clic en él te permitirá editar esos detalles. Espero que esto ayude.

Prasad Nevase Prasad Nevase
22 ene 2016 10:06:56

Por favor revisa mi código ahora

Ron Ron
23 ene 2016 09:51:07
Todas las respuestas a la pregunta 2
4
30

El código que has proporcionado está incompleto. No estoy seguro si ese es el único código que estás usando para lograr lo que deseas. Así que, además del primer bloque de código que has proporcionado, a continuación agrego todo el resto del código que se requiere para mostrar el nuevo campo en el backend en el cuadro 'Detalles del pedido' y hacerlo editable a través de campos personalizados. Ten en cuenta que en tu segundo bloque de código has nombrado la clave del campo como _billing_new_phone. Cualquier nombre de clave de campo personalizado que comience con _ (guión bajo) es un campo personalizado oculto y no aparecerá en el backend bajo "Campos personalizados".

/**
 * Procesar el checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Verificar si está establecido, si no lo está, agregar un error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'El Teléfono 2 es obligatorio. Por favor ingresa un valor' ), 'error' );
}


/**
 * Actualizar los metadatos del pedido con el valor del campo
 */
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_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Mostrar el valor del campo en la página de edición del pedido
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Teléfono 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce no hace que el nuevo campo de checkout sea editable bajo su cuadro estándar 'Detalles del pedido'. Estará disponible en modo 'solo lectura' en ese cuadro, pero puedes editarlo a través del bloque estándar de campos personalizados de WordPress. Mira la captura de pantalla a continuación.

Imagen que muestra el campo personalizado en el backend de WordPress

23 ene 2016 15:55:19
Comentarios

""Cualquier nombre de campo personalizado que comience con _ (guión bajo) es un campo personalizado oculto y no aparecerá en el backend bajo "Campos personalizados". "" ¿De dónde obtuviste esta información?

Ron Ron
24 ene 2016 13:33:54

En el codex de WordPress. Puedes obtener más información aquí

Prasad Nevase Prasad Nevase
25 ene 2016 16:00:10

Por favor ayuda a resolver la pregunta de mi amigo https://stackoverflow.com/questions/49505056/woocommerce-create-new-discount-functionality

Ron Ron
27 mar 2018 09:57:58

en mi caso, obtuve resultados usando get_post_meta( $order->get_id(), '_billing_phone_new', true ). Tuve que colocar un guión bajo al inicio del nombre de la variable en la función get_post_meta.

Dashrath Dashrath
19 may 2019 19:58:08
1

Aquí está la solución: Acceder directamente a los datos del producto no está permitido, por ejemplo:

$product->id

El método correcto a partir de ahora es:

$product->get_id()
13 dic 2017 23:57:01
Comentarios

¿Cómo responde esto a la pregunta?

Tofandel Tofandel
21 may 2020 12:28:11