Saya terkejut menemukan bahwa add_role () memodifikasi database dan gagal jika peran sudah ada. Ada dua implikasi di sini, yang pertama lebih serius daripada yang lain: 1) jika Anda dalam pengembangan dan memperbarui kode add_role Anda, Anda harus terlebih dahulu menghapus_rol () 2) setelah Anda melakukannya dengan benar, Anda seharusnya tidak perlu menjalankan kode itu lagi.
Jadi biasanya saya telah meletakkan add_role () saya di dalam kait tindakan wp_loaded. Dan karena saya sedang dalam pengembangan, saya juga telah menambahkan remove_role () sebelum add_role saya sehingga saya dapat yakin bahwa jika saya memodifikasi daftar topi saya, itu benar-benar akan berlaku.
Tapi jelas ini sekarang sedang dijalankan setiap kali halaman blog sedang diakses. Oke, saya bisa memasukkannya ke tindakan khusus admin, atau saya bisa membuat halaman plugin mungkin di bawah Pengguna atau Alat tempat peran ini bisa dibuat sekali. Saya kira saya berharap ada solusi yang lebih sederhana, lebih elegan di luar sana.
Saya tidak membayangkan ada semacam aksi run_once di sana?
Atau apakah praktik terbaik hanya dengan menambahkan peran dan kemudian menggunakan add_cap () beberapa kali? Dan bahkan kemudian saya bayangkan add_cap mengakses db.
Hanya berpikir dalam hal cara terbaik untuk mengurangi akses db yang tidak perlu. Apa praktik terbaik Anda?
sumber
remove_role()
fungsi sebelumadd_role()
membantu saya.Jawaban:
Peran dan kemampuan pengguna disimpan dalam basis data sehingga setelah Anda menggunakannya
add_role()
, maka selanjutnya WordPress akan tahu peran itu seperti peran bawaan.Sekarang jika Anda melihat fungsi
add_role()
lebih khusus pada baris 141 Anda akan melihat bahwa itu hanya menyimpan peran dan kemampuan dalam database jika var$use_db
disetel ke true (yang dia secara default) sehingga Anda dapat dengan mudah mengubahnya sebelum Anda memanggil Andaadd_role()
fungsi dan peran tidak akan disimpan.mencoba:
Memperbarui:
Jika itu dalam lingkungan pengujian / pengembangan maka saya tidak melihat sisi negatifnya, tetapi jika Anda berada di lingkungan langsung maka Anda menghemat waktu yang diperlukan untuk membuat itu pada peran setiap beban.
Adapun praktik terbaik berjalan sekali, jika dalam sebuah plugin Anda harus menggunakan
register_activation_hook
dan untuk hal lain saya menggunakan fungsi bersyarat kustom dibuat sederhana:sumber