Tindakan apa yang harus saya lakukan ketika menambahkan peran dan kemampuan?

10

Saya akan menggunakan add_role () dan $ role-> add_cap () untuk mengatur peran khusus baru dan melampirkan kemampuan baru ke peran yang ada.

Saya bertanya-tanya di mana tempat terbaik untuk melakukan ini? Jelas saya bisa melakukannya langsung di dalam functions.php dan selesai dengan itu. Tetapi apakah ini praktik terbaik? Apakah saya hanya perlu melakukan ini di admin_init? atau haruskah saya melakukannya di init?

Saya tidak sepenuhnya yakin apa praktik terbaik di sekitar menggunakan kait aksi init daripada hanya menjatuhkan panggilan fungsi langsung di dalam functions.php.

terima kasih atas masukan Anda!

Tom Auger
sumber

Jawaban:

10

Saat menambahkan peran dan kapabilitas, Anda hanya perlu menjalankan kode sekali saja karena peran dan kapabilitas disimpan ke basis data saat menggunakan add_roleatau ->add_capfungsi jadi seperti yang Andy katakan dapat Anda gunakan after_setup_themeuntuk tindakan semacam ini tetapi tambahkan semacam cek sehingga hanya berjalan sekali, seperti register_activation_hook atau menggunakan opsi:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}
Bainternet
sumber
Terima kasih untuk ini. Benarkah add_role atau add_cap ALWAYS memanfaatkan database? Ketika saya menggali kode sumber sepertinya ini tidak selalu terjadi - yaitu: di sebagian besar metode WP_Roles, ada cek untuk if ($ this-> use_db), yang membuat saya berpikir bahwa ada kemungkinan peran mungkin tidak selalu disimpan dalam DB.
Tom Auger
Selain itu, alih-alih menetapkan bendera menggunakan opsi, yang menurut saya tidak dapat diukur, apakah tidak ada cara untuk sekadar menanyakan apakah peran telah dibuat? Kegagalan itu, apa ruginya untuk mendefinisikan kembali peran jika sudah ada di sana? Apakah Anda akan mendapatkan peran rangkap atau hanya akan mengabaikannya? Melihat lagi pada kemampuan.php saya melihat ini di bawah add_role: if (isset ($ this-> peran [$ role])) kembali; yang tampaknya menunjukkan bahwa itu tidak akan menggandakan peran sehingga tidak ada salahnya dilakukan.
Tom Auger
Tidak yakin apa yang Anda maksud tetapi defualt ada $use_db = true;di kelas WP_Roles. dan untuk mengatur flag menggunakan opsi, ini adalah contoh, Anda dapat menggunakan register_activation_hooktetapi idenya adalah bahwa kode Anda hanya akan berjalan sekali dan dengan cara itu Anda menghemat waktu pengusiran.
Bainternet
Saya belum pernah melihat ini, tapi menurut saya mungkin masuk akal untuk memasukkan perubahan peran ke dalam plugin dan kemudian mengambil keuntungan dari kait aktivasi / deaktivasi untuk memicu perubahan hanya sekali. Adakah yang pernah melewati rute itu?
mrwweb
@ mrwweb yang seharusnya bekerja dengan baik juga
Bainternet
7

Untuk plugin, saya sukses menggunakan plugins_loadedini. Untuk tema, saya akan gunakan after_setup_theme.

Andy
sumber