Intereting Posts
Миграция иерархических таксономических категорий между типами сообщений Основное меню не отображается из-за кэша w3 Meta_Query как способ настройки CPT permalinks – это хорошо? Как использовать / получить массив параметров с настройками по умолчанию, используя get_option () Ограничения при изменении wp_title с фильтром Отношение пользовательского типа сообщения с иерархическими родительскими и дочерними константами Проблема с запросами wpdb, wp_insert_post, wp_insert_user и т. Д. Запрос выполняется дважды Нет фильтра кода при переключении с html на визуальный редактор, как? просмотреть страницу регистрации / страницу входа в систему как пользователя WordPress добавляет скрипт с настраиваемым типом (x-jquery-tmpl) Проблемы с сохранением метаболизма Как я могу найти источник медленных запросов в WordPress? Определение роли для участников до уровня на местах Кнопка «Внешняя ссылка» под заголовком «Post Expression» на Index.php Как использовать wp_enqueue_style () и wp_enqueue_script () только при необходимости?

add_role () запускается только один раз?

Я был удивлен, обнаружив, что add_role () изменяет базу данных и терпит неудачу, если роль уже существует. Здесь есть два значения: первый – более серьезный, чем другой: 1) если вы разрабатываете и обновляете свой код add_role, вы должны сначала remove_role () 2), как только вы это исправите, вам никогда не придется запускать этот код еще раз.

Поэтому обычно я добавляю свой add_role () внутри крюка действия wp_loaded. И так как я в разработке, я также добавил remove_role () перед моим add_role, поэтому я могу быть уверен, что если я изменю свой список кепок, он действительно вступит в силу.

Но ясно, что это теперь выполняется каждый раз, когда страница блога обращается к нему. Хорошо, я могу поместить его в действие только для администратора, или я мог бы создать плагин, возможно, в разделе «Пользователи» или «Инструменты», где эта роль может быть создана один раз. Наверное, я надеюсь, что там будет более простое и элегантное решение.

Я не думаю, что есть действие run_once?

Или лучше всего добавить роль, а затем добавить add_cap () несколько раз? И даже тогда я полагаю, что add_cap обращается к db.

Просто подумайте о наилучшем способе сокращения доступа к НБ. Каковы ваши лучшие практики?

Solutions Collecting From Web of "add_role () запускается только один раз?"

Роли и возможности пользователя сохраняются в базе данных, поэтому после того, как вы использовали ее, add_role() и затем следующую загрузку. WordPress будет знать эту роль так же, как встроенные роли.

Теперь, если вы посмотрите на функцию add_role() более конкретно на строке 141, вы увидите, что она сохраняет только роль и возможности в базе данных, если для параметра var $use_db установлено значение true (которое он по умолчанию), поэтому вы можете просто изменить перед тем, как вы add_role() функцию add_role() и эта роль не будет сохранена.

пытаться:

 //globalize $wp_roles global $wp_roles; //set use_db to flase $wp_roles->use_db = false; //then add your role $wp_roles->add_role( $role, $display_name, $capabilities ); 

Обновить:

Если он находится в среде тестирования / разработки, то я не вижу недостатков, но если вы находитесь в живой среде, вы сохраняете время, затрачиваемое на создание этой роли на каждой загрузке.

Что касается лучшей практики, запускаемой один раз, если в плагине вы должны использовать register_activation_hook и для чего-либо еще я использую простую условную условную функцию:

 function run_once($key){ $test_case = get_option('run_once'); if (isset($test_case[$key]) && $test_case[$key]){ return false; }else{ $test_case[$key] = true; update_option('run_once',$test_case); return true; } } **usage:** if (run_once('add_user_role')){ //do you stuff and it will only run once }