W jakie działania powinienem się przyłączyć, dodając role i możliwości?

10

Będę używał add_role () i $ role-> add_cap (), aby skonfigurować nową niestandardową rolę i dołączyć nową funkcję do istniejących ról.

Zastanawiam się, gdzie najlepiej to zrobić? Oczywiście mogę to zrobić bezpośrednio w funkcji.php i gotowe. Ale czy to najlepsza praktyka? Czy muszę to zrobić tylko na admin_init? czy powinienem to zrobić przy init?

Nie jestem do końca pewien, jakie są najlepsze praktyki używania haków akcji init, zamiast po prostu upuszczać bezpośrednie wywołanie funkcji w functions.php.

Dzięki za wkład!

Tom Auger
źródło

Odpowiedzi:

10

Podczas dodawania roli i możliwości wystarczy uruchomić kod tylko raz, ponieważ role i możliwości są zapisywane w bazie danych podczas używania add_rolelub ->add_capfunkcji, tak jak Andy powiedział, że możesz użyć after_setup_themedo tego rodzaju akcji, ale dodaj pewien rodzaj kontroli, aby tylko uruchamia się raz, na przykład register_activation_hook lub używając opcji

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);
    }
}
Bainternet
źródło
Dzięki za to. Czy to prawda, że ​​add_role lub add_cap ZAWSZE wykorzystuje bazę danych? Kiedy wkopałem się w kod źródłowy, wydawało mi się, że nie zawsze tak było - tj .: w większości metod WP_Roles sprawdzane jest, czy ($ this-> use_db), co sprawia, że ​​myślę, że istnieje możliwość, że role nie zawsze mogą być przechowywane w DB.
Tom Auger,
Ponadto, zamiast ustawiać flagę za pomocą opcji, co nie wydaje mi się szczególnie skalowalne, czy nie ma sposobu, aby po prostu zapytać, czy rola została utworzona? W przeciwnym razie, co za szkoda, by zmienić definicję roli, jeśli już istnieje? Czy dostaniesz duplikat roli, czy po prostu zignorujesz? Patrząc ponownie na powers.php, widzę to pod add_role: if (isset ($ this-> role [$ rola])) return; co wydaje się wskazywać, że nie powiela roli, więc nie wyrządza szkody.
Tom Auger,
Nie jestem pewien, co masz na myśli, ale $use_db = true;defualt należy do klasy WP_Roles. a jeśli chodzi o ustawianie flagi za pomocą opcji, jest to przykład, którego możesz użyć, register_activation_hookale chodzi o to, że twój kod będzie działał tylko raz i w ten sposób zaoszczędzisz sobie czasu wycinania.
Bainternet,
Nigdy tego nie widziałem, ale wydaje mi się, że warto wprowadzić zmiany roli we wtyczce, a następnie skorzystać z haków aktywacji / dezaktywacji, aby wywołać zmiany tylko raz. Czy ktoś kiedykolwiek poszedł tą drogą?
mrwweb,
@mrwweb, który również powinien działać dobrze
Bainternet,
7

W przypadku wtyczek udało mi się plugins_loadedz tego skorzystać. Użyłbym do motywów after_setup_theme.

Andy
źródło