| — | |
|---|---|
| `read` | Dostęp do panelu administracyjnego (wymagane dla wszystkich) |
| `edit_posts` | Edycja własnych wpisów |
| `publish_posts` | Publikowanie wpisów bez moderacji |
| `edit_others_posts` | Edycja wpisów innych użytkowników |
| `delete_posts` | Usuwanie własnych wpisów |
| `manage_options` | Dostęp do ustawień WordPress (tylko Administrator) |
| `manage_categories` | Zarządzanie kategoriami |
| `upload_files` | Przesyłanie mediów (obrazki, PDF) |
| `moderate_comments` | Zarządzanie komentarzami |
| `edit_pages` | Edycja stron statycznych |
| `publish_pages` | Publikowanie stron |
Metoda 1: Wtyczka User Role Editor — dla 95% przypadków
Jeśli nie chcesz pisać kodu, wtyczka User Role Editor (ponad 700 000 aktywnych instalacji) to najwygodniejsze narzędzie do zarządzania rolami.
Instalacja
- Przejdź do Wtyczki > Dodaj nową
- Wyszukaj „User Role Editor”
- Zainstaluj i aktywuj wtyczkę Vladislava Maxutova
Tworzenie nowej roli
- Przejdź do Użytkownicy > User Role Editor
- Kliknij przycisk Add Role (Dodaj rolę)
- Podaj:
- Role ID — unikalny identyfikator (np.
zewnetrzny_bloger), bez spacji, małe litery - Display Name — nazwa wyświetlana (np. „Zewnętrzny Bloger”)
- Make copy of — opcjonalnie skopiuj uprawnienia z istniejącej roli (np. Author) jako punkt startowy
- Kliknij Add Role
Edycja uprawnień
Po utworzeniu roli edytor wyświetla tabelę wszystkich dostępnych uprawnień. Zaznacz lub odznacz odpowiednie checkboxy:
- Dla roli „Zewnętrzny Bloger” zaznaczysz:
read,editposts,uploadfiles - Odznaczysz:
publishposts(posty wymagają akceptacji redaktora),deleteposts
Kliknij Update aby zapisać.
Przypisanie roli użytkownikowi
Przejdź do Użytkownicy > Wszyscy użytkownicy, kliknij edytuj przy konkretnym użytkowniku i wybierz nową rolę z listy rozwijalnej.
Metoda 2: Kod PHP w functions.php — dla deweloperów
Jeśli chcesz zarządzać rolami programowo (np. w ramach własnego pluginu lub motywu dziecięcego), WordPress oferuje natywne funkcje PHP.
Tworzenie nowej roli
function helpguru_add_custom_roles() {
// Dodaj rolę 'zewnetrzny_bloger' jeśli jeszcze nie istnieje
if ( ! get_role( 'zewnetrzny_bloger' ) ) {
add_role(
'zewnetrzny_bloger', // Slug roli
'Zewnętrzny Bloger', // Nazwa wyświetlana
array(
'read' => true, // dostęp do panelu
'edit_posts' => true, // edycja własnych wpisów
'upload_files' => true, // upload mediów
'publish_posts' => false, // nie może samodzielnie publikować
'delete_posts' => false, // nie może kasować
)
);
}
}
add_action( 'init', 'helpguru_add_custom_roles' );
Wklej tę funkcję do functions.php swojego motywu dziecięcego lub do niestandardowej wtyczki. Funkcja add_role() jest idempotentna — bezpiecznie wywołać ją wielokrotnie, rola zostanie dodana tylko raz.
Uwaga: addrole() zapisuje rolę w bazie danych (tabela wpoptions, klucz wpuserroles). Rolę trzeba dodać tylko raz, nie przy każdym załadowaniu strony — używaj hooka init z warunkiem sprawdzającym, czy rola już istnieje.
Modyfikacja istniejącej roli
Zamiast tworzyć nową rolę, możesz dodać lub odebrać uprawnienia istniejącej:
function helpguru_modify_author_role() {
$role = get_role( 'author' );
if ( $role ) {
// Daj Autorowi możliwość edycji opublikowanych wpisów
$role->add_cap( 'edit_published_posts' );
// Odbierz możliwość usuwania wpisów
$role->remove_cap( 'delete_posts' );
}
}
add_action( 'init', 'helpguru_modify_author_role' );
Usuwanie roli
Jeśli chcesz usunąć niestandardową rolę, użyj:
remove_role( 'zewnetrzny_bloger' );
Użytkownicy przypisani do usuniętej roli nie stracą konta, ale ich rola zostanie zmieniona na brak (puste uprawnienia). Przed usunięciem roli przepisz użytkowników na inną rolę.
Praktyczne przykłady niestandardowych ról
Moderator komentarzy
Rola dla osoby, która tylko moderuje komentarze, bez dostępu do edycji treści:
add_role( 'moderator_komentarzy', 'Moderator Komentarzy', array(
'read' => true,
'moderate_comments' => true,
'edit_posts' => false,
'upload_files' => false,
));
Menedżer SEO
Rola dla zewnętrznego specjalisty SEO, który edytuje metadane, ale nie treści:
add_role( 'seo_manager', 'Menedżer SEO', array(
'read' => true,
'edit_posts' => true,
'edit_pages' => true,
'edit_published_posts' => true,
'edit_published_pages' => true,
'upload_files' => true,
'publish_posts' => false,
'delete_posts' => false,
'manage_options' => false,
));
Klient WooCommerce (rozszerzona)
WooCommerce dodaje własne role (customer, shop_manager), ale możesz je rozszerzyć o niestandardowe uprawnienia:
function helpguru_extend_customer_role() {
$role = get_role( 'customer' );
if ( $role ) {
// Pozwól klientom przeglądać własne zamówienia (to jest domyślne)
// Dodaj możliwość wystawiania recenzji
$role->add_cap( 'publish_posts' ); // jeśli recenzje = custom post type
}
}
add_action( 'init', 'helpguru_extend_customer_role' );
Niestandardowe uprawnienia dla własnych funkcji
Możesz też tworzyć zupełnie własne uprawnienia, nieistniejące w rdzeniu WordPress — używane przez własne wtyczki lub motywy:
// Dodaj własne uprawnienie do roli
$role = get_role( 'editor' );
$role->add_cap( 'zarzadzaj_ofertami' );
// Sprawdź uprawnienie w kodzie wtyczki/motywu
if ( current_user_can( 'zarzadzaj_ofertami' ) ) {
// Pokaż sekcję zarządzania ofertami
}
To podejście jest szczególnie przydatne przy budowie systemów CRM, portali klienckich lub aplikacji zarządzania treścią z granularnym dostępem.
Debugowanie ról i uprawnień
Jeśli coś nie działa jak powinno, możesz podejrzeć aktualne uprawnienia zalogowanego użytkownika:
// W kodzie deweloperskim (nie w produkcji!):
$current_user = wp_get_current_user();
var_dump( $current_user->allcaps );
Lub użyj wtyczki WP User Info albo zakładki User w Query Monitor — wyświetlają kompletne informacje o roli i uprawnieniach bieżącego użytkownika.
Bezpieczeństwo a role użytkowników
Precyzyjne zarządzanie rolami to jeden z fundamentów bezpieczeństwa WordPress. Użytkownik bez uprawnień manage_options nie może zmienić ustawień strony — nawet jeśli ktoś przejmie jego konto. To klasyczna zasada najmniejszych uprawnień (Principle of Least Privilege).
Warto pamiętać, że w środowisku WordPress Multisite role działają per-witryna, a Super Admin to osobna warstwa ponad standardowymi rolami — szczegóły w artykule: WordPress Multisite — kiedy używać i jak skonfigurować?.
Jeśli zarządzasz sklepem WooCommerce i chcesz połączyć precyzyjne role z pełną ochroną sklepu, przeczytaj: Bezpieczeństwo WooCommerce — 10 kroków ochrony sklepu.
Podsumowanie
System ról WordPress jest wystarczająco elastyczny, żeby obsłużyć praktycznie każdy scenariusz zarządzania dostępem — od prostego bloga z moderatorem, przez sklep z wieloma rolami pracowników, po rozbudowany portal kliencki. Wybierz wtyczkę User Role Editor jeśli potrzebujesz szybkiego, wizualnego narzędzia. Wybierz kod PHP w functions.php lub niestandardowej wtyczce jeśli zarządzasz rolami programowo i chcesz mieć pełną kontrolę wersjonowania.
Kluczowa zasada: dawaj użytkownikowi tylko to, czego naprawdę potrzebuje — nic więcej. To nie utrudnia pracy, tylko ogranicza potencjalne szkody gdy coś pójdzie nie tak.
Masz pytania związane z tym tematem? Skontaktuj się ze mną:
Chętnie Ci pomogę w tym zakresie
Email: [email protected]
Telefon: +48 888 830 888
Strona: https://helpguru.eu