Bagaimana cara menampilkan bidang khusus dalam pesanan woocommerce di panel admin?

13

saat ini saya menambahkan bidang penagihan kustom di woocommerce oleh

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

saya perlu mengedit nilai bidang ini di sisi admin. Saat ini saya dapat mengedit semua nilai lain di alamat penagihan tetapi nilai ini tidak muncul di bagian admin. Saya menggunakan kode berikut hanya untuk melihat nilai di bagian 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 );

Saya membaca dokumentasi https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Tapi semua yang ada dalam dokumen ini berfungsi dengan benar, berharap billing_phone / Telepon dapat dilihat di bawah bidang Kustom. Saya memeriksa opsi layar tetapi saya sudah mencentang bidang khusus. Bidang khusus lainnya dan nilainya terlihat dan dapat diedit.

Bagaimana saya bisa mengedit nilai ini di back end. Tolong bantu .

Ron
sumber
Blok kode pertama dalam pertanyaan Anda, memodifikasi bidang 'Nomor telepon' default. Itu tidak menambahkan bidang baru ke formulir checkout. Bidang checkout tidak akan tersedia di bawah "bidang khusus", jadi jangan mencarinya di sana. Jika Anda ingin mengedit salah satu bidang dari alamat penagihan atau alamat pengiriman, buka backend dan klik pesanan apa pun di bawah daftar pesanan. Kemudian Anda akan melihat ikon edit kecil di samping tajuk 'Rincian Penagihan' dan 'Rincian Pengiriman'. Mengklik itu akan memungkinkan Anda untuk mengedit rincian itu. Saya harap ini membantu.
Prasad Nevase
Silakan periksa kode saya sekarang
Ron

Jawaban:

22

Kode yang Anda berikan tidak lengkap. Tidak yakin apakah itu satu-satunya kode yang Anda gunakan untuk mencapai apa yang Anda inginkan. Jadi, selain blok kode pertama yang Anda berikan, di bawah ini saya menambahkan semua sisa kode yang diperlukan untuk menampilkan bidang baru di backend di kotak 'Detail Pesanan' dan membuatnya dapat diedit melalui bidang khusus. Harap dicatat, di blok kode kedua Anda, Anda telah menamai kunci bidang sebagai _billing_new_phone. Nama kunci bidang khusus apa pun yang dimulai dengan _ (garis bawah) adalah bidang khusus tersembunyi & tidak akan muncul di backend di bawah "Bidang Kustom".

/**
 * 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 tidak membuat bidang checkout baru dapat diedit di bawah kotak 'Rincian Pesanan' standar. Ini akan tersedia sebagai mode 'hanya lihat' di kotak itu tetapi Anda dapat mengedit yang sama melalui blok bidang khusus standar WordPress. Lihat screenshot di bawah ini.

masukkan deskripsi gambar di sini

Prasad Nevase
sumber
"" Setiap nama kunci bidang khusus yang dimulai dengan _ (garis bawah) adalah bidang khusus tersembunyi & tidak akan muncul di backend di bawah "Bidang Kustom". "" dari mana Anda mendapatkan informasi ini?
Ron
2
Di WordPress codex. Anda bisa mendapatkan info lebih lanjut di sini
Prasad Nevase
Tolong bantu selesaikan pertanyaan teman saya stackoverflow.com/questions/49505056/…
Ron
dalam kasus saya, saya mendapat hasil dengan menggunakan get_post_meta ($ order-> get_id (), '_billing_phone_new', true). Saya harus meletakkan garis bawah di depan nama variabel di fungsi get_post_meta.
Dashrath
1

Ini solusinya: Mengakses data produk secara langsung tidak diperbolehkan, mis

$product->id

Metode yang benar ke depan adalah:

$product->get_id()
Gael
sumber