tomauger
  • 0
Эксперт

Какое действие следует подключить при добавлении ролей и возможностей?

  • 0

Я собираюсь использовать add_role() и $role->add_cap(), чтобы настроить новую пользовательскую роль и добавить новые возможности к существующим ролям.

Мне интересно, где это лучше всего сделать? Очевидно, я могу сделать это прямо внутри functions.php и покончить с этим. Но является ли это лучшей практикой? Мне нужно сделать это только на admin_init? или я должен сделать это на инициализации?

Я не совсем уверен, что лучше всего использовать хуки действий инициализации, а не просто отбрасывать прямой вызов функции внутри functions.php.

спасибо за ваш вклад!

Share
  1. При добавлении роли и возможностей вам нужно запустить код только один раз, так как роли и возможности сохраняются в базе данных при использовании add_role или ->add_cap функциях, поэтому, как сказал Энди, вы можете использовать after_setup_theme для такого рода действий, но добавьте какую-то проверку, чтобы это только запускается один раз, например, register_activation_hook или с использованием параметров:

    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);
        }
    }
    
    • 0
    • Спасибо за это. Правда ли, что add_role или add_cap ВСЕГДА используют базу данных? Когда я копался в исходном коде, мне казалось, что это не всегда так, т.е. в большинстве методов WP_Roles есть проверка if ($this->use_db), что наводит меня на мысль, что есть вероятность того, что роли может не всегда храниться в БД.

      • 0
    • Кроме того, вместо установки флага с помощью параметров, которые не кажутся мне особенно масштабируемыми, нет ли способа просто запросить, была ли создана роль? В противном случае какой вред принесет переопределение роли, если она уже существует? Вы бы получили дублирующую роль или просто проигнорировали бы? Снова взглянув на возможности.php, я вижу это в разделе add_role: if ( isset($this->roles[$role] ) ) return; что, кажется, указывает на то, что он не будет дублировать роль, поэтому никакого вреда не будет.

      • 0
    • Не уверен, что вы имеете в виду, но по умолчанию находится $use_db = true; в классе WP_Roles. а что касается установки флага с помощью options, это пример, который вы можете использовать, register_activation_hook но идея состоит в том, что ваш код будет запускаться только один раз, и таким образом вы сэкономите время выполнения.

      • 0
    • Я никогда не видел этого до конца, но мне кажется, что может иметь смысл поместить изменения роли в плагин, а затем воспользоваться хуками активации/деактивации, чтобы вызвать изменения только один раз. Кто-нибудь когда-нибудь шел по этому пути?

      • 0
    • @mrwweb тоже должно работать нормально

      • 0
  2. Для плагинов я успешно использовал plugins_loaded для этого. Для тем я бы использовал after_setup_theme .

    • 0

Оставить ответ

You must login to add an answer.