Cum să afișezi câmpuri personalizate în comenzile WooCommerce în panoul de administrare

21 ian. 2016, 13:48:10
Vizualizări: 91.9K
Voturi: 16

În prezent am adăugat un câmp personalizat de facturare în WooCommerce folosind:

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

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

Trebuie să editez valoarea acestui câmp în partea de administrare. În prezent pot edita toate celelalte valori din adresa de facturare, dar această valoare nu apare în secțiunea de admin. Folosesc următorul cod doar pentru a vedea valoarea în secțiunea de administrare:

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

Am citit documentația https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/. Totul în acest document funcționează corect, cu excepția faptului că billing_phone/Telefon nu apare sub Câmpuri personalizate. Am verificat opțiunile ecranului și am bifat deja câmpurile personalizate. Alte câmpuri personalizate și valorile lor sunt vizibile și editabile.

Cum pot edita această valoare în back-end? Vă rog să mă ajutați.

2
Comentarii

Primul bloc de cod din întrebarea ta modifică câmpul implicit 'Număr de telefon'. Nu adaugă niciun câmp nou în formularul de finalizare a comenzii. Câmpurile de finalizare nu vor fi disponibile sub "câmpuri personalizate", așa că te rog să nu le cauți acolo. Dacă dorești să editezi orice câmp din adresa de facturare sau de livrare, mergi în panoul de administrare și dă click pe orice comandă din lista de comenzi. Apoi vei vedea o mică pictogramă de editare lângă titlurile 'Detalii Facturare' și 'Detalii Livrare'. Dând click pe aceasta, vei putea edita aceste detalii. Sper că acest lucru te ajută.

Prasad Nevase Prasad Nevase
22 ian. 2016 10:06:56

Te rog verifică acum codul meu

Ron Ron
23 ian. 2016 09:51:07
Toate răspunsurile la întrebare 2
4
30

Codul pe care l-ați furnizat este incomplet. Nu sunt sigur dacă acesta este singurul cod pe care îl folosiți pentru a obține ceea ce doriți. Deci, pe lângă primul bloc de cod pe care l-ați furnizat, mai jos adaug tot restul codului necesar pentru a afișa noul câmp în backend în caseta „Detalii comandă” și pentru a-l face editabil prin câmpuri personalizate. Rețineți că, în al doilea bloc de cod, ați denumit cheia câmpului _billing_new_phone. Orice nume de cheie de câmp personalizat care începe cu _ (underscore) este un câmp personalizat ascuns și nu va apărea în backend sub „Câmpuri personalizate”.

/**
 * Procesează finalizarea comenzii
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Verifică dacă este setat, dacă nu este setat adaugă o eroare.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Telefonul 2 este obligatoriu. Vă rugăm să introduceți o valoare' ), 'error' );
}


/**
 * Actualizează metadatele comenzii cu valoarea câmpului
 */
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'] ) );
    }
}


/**
 * Afișează valoarea câmpului pe pagina de editare a comenzii
 */
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>'.__('Telefon 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce nu face noul câmp de finalizare a comenzii editabil sub caseta standard „Detalii comandă”. Acesta va fi disponibil în modul „doar vizualizare” în acea casetă, dar îl puteți edita prin blocul standard de câmpuri personalizate din WordPress. Consultați captura de ecran de mai jos.

Introduceți descrierea imaginii aici

23 ian. 2016 15:55:19
Comentarii

"Orice nume de câmp personalizat care începe cu _ (underscore) este un câmp personalizat ascuns și nu va apărea în backend sub "Câmpuri personalizate"." De unde ai obținut această informație?

Ron Ron
24 ian. 2016 13:33:54

Pe codex-ul WordPress. Poți obține mai multe informații aici

Prasad Nevase Prasad Nevase
25 ian. 2016 16:00:10

Te rog ajută-mă să rezolv întrebarea prietenului meu https://stackoverflow.com/questions/49505056/woocommerce-create-new-discount-functionality

Ron Ron
27 mar. 2018 09:57:58

în cazul meu, am obținut rezultate folosind get_post_meta( $order->get_id(), '_billing_phone_new', true ). A trebuit să pun underscore în fața numelui variabilei în funcția get_post_meta.

Dashrath Dashrath
19 mai 2019 19:58:08
1

Iată soluția: Accesarea directă a datelor produsului nu este permisă, de exemplu:

$product->id

Metoda corectă de utilizat de acum înainte este:

$product->get_id()
13 dec. 2017 23:57:01
Comentarii

Cum răspunde acest lucru la întrebare?

Tofandel Tofandel
21 mai 2020 12:28:11