Come visualizzare il campo personalizzato negli ordini di woocommerce nel pannello di amministrazione?


13

attualmente aggiungo un campo di fatturazione personalizzato in woocommerce da

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');

ho bisogno di modificare questo valore di campo nel lato amministratore. Attualmente posso modificare tutti gli altri valori nell'indirizzo di fatturazione ma questo valore non viene visualizzato nella sezione admin. Uso il seguente codice solo per vedere il valore nella sezione admin.

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

Ho letto la documentazione https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Ma tutto in questo documento che funziona correttamente si aspetta billing_phone / Phone è nota vedi sotto campo personalizzato. Controllo l'opzione dello schermo ma ho già spuntato il campo personalizzato. L'altro campo personalizzato e il suo valore sono visibili e modificabili.

Come posso modificare questo valore nel back-end. Per favore aiuto .


Il primo blocco di codice nella domanda modifica il campo predefinito "Numero di telefono". Non aggiunge alcun nuovo campo al modulo di pagamento. I campi di checkout non saranno disponibili in "campi personalizzati", quindi non cercare lì. Se si desidera modificare uno qualsiasi dei campi dall'indirizzo di fatturazione o di spedizione, andare al back-end e fare clic su qualsiasi ordine nell'elenco degli ordini. Quindi vedrai una piccola icona di modifica oltre alle intestazioni "Dettagli di fatturazione" e "Dettagli di spedizione". Cliccando su quello ti permetterà di modificare quei dettagli. Spero che questo possa essere d'aiuto.
Prasad Nevase,

Per favore, controlla il mio codice adesso
Ron,

Risposte:


22

Il codice che hai fornito è incompleto. Non sono sicuro se questo è l'unico codice che stai utilizzando per ottenere ciò che desideri. Quindi, oltre al primo blocco di codice che hai fornito, qui sotto sto aggiungendo tutto il resto del codice necessario per mostrare il nuovo campo sul back-end nella casella "Dettagli ordine" e renderlo modificabile attraverso campi personalizzati. Si noti che nel secondo blocco di codice è stata denominata la chiave di campo come _billing_new_phone. Qualsiasi nome di chiave di campo personalizzato che inizia con _ (trattino basso) è un campo personalizzato nascosto e non verrà visualizzato sul back-end in "Campi personalizzati".

/**
 * 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 non rende modificabile il nuovo campo di checkout nella sua casella standard "Dettagli ordine". Sarà disponibile come modalità 'solo visualizzazione' in quella casella ma puoi modificarlo tramite il blocco di campi personalizzati standard di WordPress. Vedi sotto screenshot.

inserisci qui la descrizione dell'immagine


"" Qualsiasi nome di chiave di campo personalizzato che inizia con _ (trattino basso) è un campo personalizzato nascosto e non verrà visualizzato sul back-end in "Campi personalizzati". "" da dove ottieni queste informazioni?
Ron,

2
Sul codice WordPress. Puoi ottenere maggiori informazioni qui
Prasad Nevase,

Si prega di Helpt risolvere il mio amico Domanda stackoverflow.com/questions/49505056/...
Ron

nel mio caso, ho ottenuto risultati usando get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Ho dovuto mettere il trattino basso davanti al nome della variabile nella funzione get_post_meta.
Dashrath,

1

Ecco la soluzione: l'accesso diretto ai dati di prodotto non è consentito, ad es

$product->id

Il metodo corretto per il futuro è:

$product->get_id()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.