Rol ve yetenek eklerken hangi eyleme geçmeliyim?


10

Yeni bir özel rol ayarlamak ve mevcut rollere yeni bir özellik eklemek için add_role () ve $ role-> add_cap () kullanacağım.

Bunu yapmak için en iyi yerin nerede olduğunu merak ediyorum. Açıkçası bunu doğrudan fonksiyonlar içinde yapabilirim. Php ve onunla yapılabilir. Ama bu en iyi yöntem mi? Bunu yalnızca admin_init üzerinde yapmam gerekir mi? ya da init üzerinde yapmalı mıyım?

Init action hooks kullanarak en iyi uygulamaların neler olduğunu tam olarak bilmiyorum, sadece function.php içinde doğrudan bir işlev çağrısı bırakmak değil.

girdiniz için teşekkürler!

Yanıtlar:


10

Rol ve yeteneklerini eklerken kullanırken roller ve yetenekleri veritabanına kaydedilir beri bir kez sadece kod çalıştırmasına gerek add_roleyoksa ->add_capbu yüzden sadece Andy gibi fonksiyonları kullanabilirsiniz söyledi after_setup_themeeylem bu tür ama öylesine çek çeşit eklemek sadece register_activation_hook gibi veya seçenekleri kullanarak bir kez çalışır :

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

Bunun için teşekkürler. Add_role veya add_cap HER ZAMAN veritabanından yararlandığı doğru mu? Kaynak kod içine kazdık bu her zaman böyle değildi gibi görünüyordu - yani: WP_Roles yöntemlerinin çoğunda, ($ this-> use_db) için bir kontrol var, bu da bana rolleri olduğunu düşündürüyor her zaman DB'de depolanmayabilir.
Tom Auger

Ayrıca, özellikle ölçeklenebilir olarak görünmeyen seçenekleri kullanarak bir bayrak ayarlamak yerine, rolün yaratılıp yaratılmadığını sorgulamanın bir yolu yok mu? Başarısız olursa, rol zaten mevcutsa rolü yeniden tanımlamak ne zararı olur? Yinelenen bir rol alır mıydınız yoksa yalnızca yoksayar mı? Features.php'ye tekrar baktığımda bunu add_role altında görüyorum: if (isset ($ this-> roles [$ role])) return; bu da rolü çoğaltmayacağına işaret ediyor gibi gözükmüyor.
Tom Auger

Ne demek istediğinden emin değilim ama $use_db = true;defualt WP_Roles sınıfında. ve seçenekleri kullanarak bir bayrak ayarlamaya gelince, bu bir örnek, kullanabilirsiniz, register_activation_hookancak fikir kodunuzun sadece bir kez çalışacağı ve bu şekilde kendinize özel zamandan tasarruf edeceğinizdir.
Bainternet

Bunu daha önce hiç görmedim, ancak rol değişikliklerini bir eklentiye koymanın ve ardından değişiklikleri bir kez tetiklemek için aktivasyon / devre dışı bırakma kancalarından faydalanmanın mantıklı olabileceği bana çarpıcı geliyor. Hiç kimse bu rotadan geçti mi?
mrwweb

@mrwweb de gayet iyi çalışmalı
Bainternet

7

Eklentiler için, bunu kullanarak başarılı oldum plugins_loaded. Temalar için kullanırım after_setup_theme.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.