¿Cómo mostrar el campo personalizado en los pedidos de woocommerce en el panel de administración?

13

actualmente agrego un campo de facturación personalizado en woocommerce por

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 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 este valor de campo en el lado 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. Utilizo el siguiente código solo para ver el valor en la sección de administración.

function order_phone_backend($order){
    echo "<p><strong>Billing phone 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 );

Leí la documentación https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Pero todo en este documento funciona correctamente, espere que billing_phone / Phone se vea en el campo Personalizado. Verifico la opción de pantalla pero ya marqué el campo personalizado. Otro campo personalizado y su valor son visibles y editables.

¿Cómo puedo editar este valor en el back-end? Por favor ayuda .

Ron
fuente
El primer bloque de código en su pregunta modifica el campo predeterminado 'Número de teléfono'. No agrega ningún campo nuevo al formulario de pago. Los campos de pago no estarán disponibles en "campos personalizados", así que no lo busque allí. Si desea editar cualquiera de los campos desde la dirección de facturación o la dirección de envío, vaya al backend y haga clic en cualquier pedido en la lista de pedidos. Luego verá un pequeño icono de edición además de los encabezados 'Detalles de facturación' y 'Detalles de envío'. Al hacer clic en eso, podrá editar esos detalles. Espero que esto ayude.
Prasad Nevase
Por favor revise mi código ahora
Ron

Respuestas:

22

El código que ha proporcionado está incompleto. No estoy seguro de si ese es el único código que está utilizando para lograr lo que desea. Entonces, además del primer bloque de código que ha proporcionado, a continuación estoy agregando 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. Tenga en cuenta que en su segundo bloque de código ha nombrado la clave de 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 en "Campos personalizados".

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * Update the order meta with field value
 */
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'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
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>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce no hace que el nuevo campo de pago sea editable en su cuadro estándar 'Detalles del pedido'. Estará disponible como modo 'solo lectura' en ese cuadro, pero puede editarlo a través del bloque de campos personalizados estándar de WordPress. Ver abajo captura de pantalla.

ingrese la descripción de la imagen aquí

Prasad Nevase
fuente
"" Cualquier nombre de clave de campo personalizado que comience con _ (guión bajo) es un campo personalizado oculto y no aparecerá en el backend en "Campos personalizados". "" ¿de dónde obtienes esta información?
Ron
2
En el codex de WordPress. Puede obtener más información aquí
Prasad Nevase
Ayude a resolver la pregunta de mi amigo stackoverflow.com/questions/49505056/…
Ron
en mi caso, obtuve resultados usando get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Tuve que poner guión bajo delante del nombre de la variable en la función get_post_meta.
Dashrath
1

Aquí está la solución: no está permitido acceder directamente a los datos del producto, p. Ej.

$product->id

El método correcto en el futuro es:

$product->get_id()
Gaélico
fuente