Saya ingin menyembunyikan kotak meta menggunakan opsi layar, alih-alih menghapusnya atau membatasi mereka ke peran pengguna, tujuannya adalah untuk hanya "menghapus centang" kotak meta untuk pengguna.
Saya melihat bagaimana ini akan menjadi rumit karena kode apa pun yang akan membuat perubahan DB untuk pengguna tidak akan diizinkan untuk berjalan setiap kali mereka menekan halaman karena itu hanya akan mengatur ulang. Tetapi orang-orang yang lebih pintar daripada saya kode inti, jadi mungkin ada cara. Dan jika ada, saya ingin tahu.
Ada ide?
Jawaban:
Anda mengacu pada metabox di layar posting admin kan?
Untuk itu Anda tidak memerlukan plugin, cukup masukkan yang berikut ke dalam file functions.php Anda.
Pada dasarnya apa yang terjadi adalah bahwa untuk pengguna yang saat ini masuk, Anda mengubah beberapa meta_values yang disimpan dalam tabel wp_usermeta.
Ada dua cara untuk menggunakan fungsi ini, Anda dapat menghubungkan ke 'user_register' atau Anda dapat menghubungkan ke 'admin_init'.
Keuntungan menggunakan 'user_register' adalah bahwa fungsi ini hanya akan diaktifkan ketika pengguna baru terdaftar (sehingga biaya overhead lebih rendah). Namun itu tidak akan berfungsi untuk pengguna yang sudah ada.
Jika Anda ingin itu berfungsi untuk pengguna yang sudah ada, maka kaitkan ke 'admin_init'. Kerugiannya tentu saja adalah bahwa sekarang fungsi ini menyala setiap kali pengguna pergi ke halaman admin.
sumber
functions.php
file tema saya karena opsi default adalah untuk proyek tertentu, yang diwakili / ditempati oleh tema yang saya kembangkan.Ada
default_hidden_meta_boxes
filter diget_hidden_meta_boxes()
yang memungkinkan untuk memodifikasi yang tidak ditampilkan selama pengguna belum mengubah preferensi dalam opsi layar.sumber
Saya punya komentar kode tentang tiga solusi yang sudah diposting, tetapi juga komentar umum
Mereka menyajikan pilihan yang kurang optimal: mengesampingkan pilihan kotak centang Opsi Layar pengguna; atau hormati tetapi biarkan kode Anda diabaikan jika pengguna pernah mengubah kotak centang, bahkan untuk meta_box lainnya, atau sebelum kode Anda ada di WP. Tampaknya pilihan penuh hormat hanya berguna jika semua pengguna Anda baru. Solusi terbaik adalah dengan menetapkan opsi pengguna khusus untuk menentukan apakah default meta_box spesifik Anda telah diubah oleh pengguna, dan hormati itu. Tidak, saya belum menulis kode itu! Seharusnya mudah ... :)
Tiga solusi diposting:
1. Solusi WraithKenny adalah
hidden_meta_boxes
solusi yang mengesampingkan user_option. Catatan itu mencakup semua jenis posting ('posting', 'halaman', 'tautan', 'lampiran', dan semua jenis posting khusus). Tidak apa-apa kecuali Anda menginginkannya spesifik. Anda menentukan post_type diadd_meta_box()
panggilan Anda . Anda dapat mencoba mencocokkannya, atau hanya menaruhnya karena yang tidak cocok akan diabaikan. Jika Anda ingin mengetahui post_type di filter, Anda dapat menggunakanscreen
parameter tambahan :2. Seperti yang dikatakan Rarst,
default_hidden_meta_boxes
hormati user_option. Sepertihidden_meta_boxes
, Anda dapat menggunakan parameter $ screen untuk membedakan post_types.3. Fungsi set_user_metaboxes () dari Drebabels juga menghormati user_option. Catat itu hard-coded untuk layar edit 'post'. Untuk menangani layar edit 'halaman', dan post_types lainnya, bungkus kode dalam loop ini:
Ya,
get_user_meta
seharusnya begituget_user_option
. Untuk satu situs tidak masalah, dan bahkan untuk multi situs mungkin tidak. Lihat wp-admin / include / ajax-actions.php untuk alasan:update_user_option
memiliki parameter global 'benar'.sumber
Ada juga
hidden_meta_boxes
filter yang akan "hapus centang" metabox (membuatnya tersembunyi) di setiap halaman memuat (tetapi tidak perlu memperbarui database sama sekali). Jika Anda hanya menginginkannya untuk pengguna baru sampai mereka mencentang kotaknya sendiri, gunakan jawaban Rarst.sumber