До яких дій я повинен підключитися, додаючи ролі та можливості?


10

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

Мені цікаво, де найкраще це зробити? Очевидно, що я можу це зробити прямо у function.php і робити це з ним. Але це найкраща практика? Чи потрібно мені це робити лише на admin_init? або я повинен це робити на init?

Я не зовсім впевнений, які найкращі практики стосуються використання ініціальних гачків дій, а не просто відмови від прямого виклику функції всередині function.php.

дякую за ваш внесок!

Відповіді:


10

При додаванні ролі та можливостей вам потрібно запустити код лише один раз, оскільки ролі та можливості зберігаються в базі даних при використанні 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);
    }
}

Дякую за це Це правда, що add_role або add_cap ЗАВЖДИ використовує базу даних? Коли я вкопався у вихідний код, здавалося, це не завжди так - тобто: у більшості методів WP_Roles є перевірка на наявність ($ this-> use_db), що змушує мене думати, що існує можливість, що ролі може не завжди зберігатися в БД.
Том Ожер

Крім того, замість того, щоб встановити прапор за допомогою параметрів, що не вважає мене особливо масштабованим, чи немає способу просто запитати, чи створена роль? Якщо цього не зробити, яку шкоду було б зробити для переозначення ролі, якщо вона вже є? Ви отримали б дублюючу роль або просто ігнорували б її? Подивившись знову на sposobnosti.php, я бачу це в add_role: if (isset ($ this-> role [$ role])) return; що, схоже, вказує на те, що вона не буде дублювати роль, тому не завдасть шкоди.
Том Ожер

Не впевнений, що ви маєте на увазі, але defualt є $use_db = true;у класі WP_Roles. що стосується встановлення прапора за допомогою параметрів, це приклад, який ви можете використовувати, register_activation_hookале ідея полягає в тому, що ваш код запуститься лише один раз і таким чином ви заощадите собі час виправдання.
Бейнтернет

Я ніколи цього не бачив, але мені здається, що це може мати сенс поміняти зміни ролі в плагін, а потім скористатися гачками активації / деактивації, щоб викликати зміни лише один раз. Хтось коли-небудь спускався цим маршрутом?
mrwweb

@mrwweb, який також повинен працювати добре
Bainternet

7

Для плагінів я мав успіх plugins_loadedдля цього. Для тем я б використав after_setup_theme.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.