Come visualizzare campi personalizzati negli ordini WooCommerce nel pannello di amministrazione?

21 gen 2016, 13:48:10
Visualizzazioni: 91.9K
Voti: 16

Attualmente aggiungo un campo di fatturazione personalizzato in WooCommerce con

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Telefono 2', 'woocommerce'),
    'placeholder'  => _x('Telefono 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 il valore di questo campo sul lato amministrativo. Attualmente posso modificare tutti gli altri valori nell'indirizzo di fatturazione ma questo valore non appare nella sezione amministrativa. Uso il seguente codice solo per vedere il valore nella sezione amministrativa.

function order_phone_backend($order){
    echo "<p><strong>Telefono di fatturazione 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 funziona correttamente tranne billing_phone/Phone che non si vede sotto Campo personalizzato. Ho controllato le opzioni schermo ma ho già spuntato campo personalizzato. Altri campi personalizzati e i loro valori sono visibili e modificabili.

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

2
Commenti

Il primo blocco di codice nella tua domanda modifica il campo predefinito 'Numero di telefono'. Non aggiunge alcun nuovo campo al modulo di checkout. I campi del checkout non saranno disponibili sotto "campi personalizzati", quindi per favore non cercarli lì. Se vuoi modificare qualsiasi campo dell'indirizzo di fatturazione o di spedizione, vai nel backend e clicca su qualsiasi ordine nella lista ordini. Poi vedrai una piccola icona di modifica accanto alle intestazioni 'Dettagli di Fatturazione' e 'Dettagli di Spedizione'. Cliccando su di essa potrai modificare quei dettagli. Spero che questo ti aiuti.

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

Per favore controlla ora il mio codice

Ron Ron
23 gen 2016 09:51:07
Tutte le risposte alla domanda 2
4
30

Il codice che hai fornito è incompleto. Non sono sicuro se sia l'unico codice che stai utilizzando per ottenere ciò che desideri. Quindi, oltre al primo blocco di codice che hai fornito, di seguito aggiungo tutto il resto del codice necessario per mostrare il nuovo campo nel backend nella casella "Dettagli ordine" e renderlo modificabile attraverso i campi personalizzati. Tieni presente che nel tuo secondo blocco di codice hai chiamato il campo _billing_new_phone. Qualsiasi nome di campo personalizzato che inizia con _ (underscore) è un campo personalizzato nascosto e non apparirà nel backend sotto "Campi personalizzati".

/**
 * Elabora il checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Controlla se è impostato, se non lo è aggiungi un errore.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Il telefono 2 è obbligatorio. Inserisci un valore' ), 'error' );
}


/**
 * Aggiorna i meta dell'ordine con il valore 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'] ) );
    }
}


/**
 * Mostra il valore del campo nella pagina di modifica dell'ordine
 */
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>'.__('Telefono 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce non rende modificabile il nuovo campo del checkout sotto la sua standard casella "Dettagli ordine". Sarà disponibile in modalità "sola lettura" in quella casella ma puoi modificarlo attraverso il blocco standard dei campi personalizzati di WordPress. Vedi lo screenshot qui sotto.

Visualizzazione del campo personalizzato nell'editor WordPress

23 gen 2016 15:55:19
Commenti

""Qualsiasi nome di chiave di campo personalizzato che inizia con _ (underscore) è un campo personalizzato nascosto e non apparirà nel backend sotto "Campi personalizzati". "" da dove hai ottenuto queste informazioni?

Ron Ron
24 gen 2016 13:33:54

Sul codex di WordPress. Puoi ottenere maggiori informazioni qui

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

Per favore aiutami a risolvere la domanda del mio amico https://stackoverflow.com/questions/49505056/woocommerce-create-new-discount-functionality

Ron Ron
27 mar 2018 09:57:58

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

Dashrath Dashrath
19 mag 2019 19:58:08
1

Ecco la soluzione: Non è consentito accedere direttamente ai dati del prodotto, ad esempio:

$product->id

Il metodo corretto da utilizzare è:

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

In che modo questo risponde alla domanda?

Tofandel Tofandel
21 mag 2020 12:28:11