Я собираюсь использовать add_role() и $role->add_cap(), чтобы настроить новую пользовательскую роль и добавить новые возможности к существующим ролям.
Мне интересно, где это лучше всего сделать? Очевидно, я могу сделать это прямо внутри functions.php и покончить с этим. Но является ли это лучшей практикой? Мне нужно сделать это только на admin_init? или я должен сделать это на инициализации?
Я не совсем уверен, что лучше всего использовать хуки действий инициализации, а не просто отбрасывать прямой вызов функции внутри functions.php.
спасибо за ваш вклад!
При добавлении роли и возможностей вам нужно запустить код только один раз, так как роли и возможности сохраняются в базе данных при использовании
add_role
или->add_cap
функциях, поэтому, как сказал Энди, вы можете использоватьafter_setup_theme
для такого рода действий, но добавьте какую-то проверку, чтобы это только запускается один раз, например, register_activation_hook или с использованием параметров:Спасибо за это. Правда ли, что add_role или add_cap ВСЕГДА используют базу данных? Когда я копался в исходном коде, мне казалось, что это не всегда так, т.е. в большинстве методов WP_Roles есть проверка if ($this->use_db), что наводит меня на мысль, что есть вероятность того, что роли может не всегда храниться в БД.
Кроме того, вместо установки флага с помощью параметров, которые не кажутся мне особенно масштабируемыми, нет ли способа просто запросить, была ли создана роль? В противном случае какой вред принесет переопределение роли, если она уже существует? Вы бы получили дублирующую роль или просто проигнорировали бы? Снова взглянув на возможности.php, я вижу это в разделе add_role: if ( isset($this->roles[$role] ) ) return; что, кажется, указывает на то, что он не будет дублировать роль, поэтому никакого вреда не будет.
Не уверен, что вы имеете в виду, но по умолчанию находится
$use_db = true;
в классе WP_Roles. а что касается установки флага с помощью options, это пример, который вы можете использовать,register_activation_hook
но идея состоит в том, что ваш код будет запускаться только один раз, и таким образом вы сэкономите время выполнения.Я никогда не видел этого до конца, но мне кажется, что может иметь смысл поместить изменения роли в плагин, а затем воспользоваться хуками активации/деактивации, чтобы вызвать изменения только один раз. Кто-нибудь когда-нибудь шел по этому пути?
@mrwweb тоже должно работать нормально
Для плагинов я успешно использовал
plugins_loaded
для этого. Для тем я бы использовалafter_setup_theme
.