Jak dodać rolę i ID użytkownika w body strony i zaplecza WP?
- Poziom trudności:
Pomogłem rozwiązać Twój problem? Wspieraj moje działania bym pisał więcej:
Jeśli udostępniasz dostęp do swojej strony innym użytkownikom i zależy Ci na tym aby wyświetlać im spersonalizowane komunikaty albo chcesz ukryć przed nimi elementy witryny do których i tak nie mają dostępu to dobrym wyjściem jest dodanie do znacznika <body> informacji o roli jaką posiada użytkownik oraz o numerze ID pozwalającym tego użytkownika zidentyfikować, aby mu np. wyłączyć część menu.
Zanim przejdziemy do konkretów chciałbym zaznaczyć, że poniższa instrukcja rozwiąże problem dodawania do <body> klas pozwalających zidentyfikować użytkownika. Znaczy to, że jeśli coś ukryjesz np. w kokpicie WP to użytkownik znając link będzie w stanie tam się dostać, nawet jeśli nie będzie tej opcji widział. Innymi słowy, ukrycie zakładki nie zablokuje na stałe dostępu, a wyłącznie schowa go przed konkretnym użytkownikiem lub grupą.
Co to jest rola i ID użytkownika?
Zacznijmy od podstaw. Każdy użytkownik posiada numer ID i po tym numerze można go zidentyfikować. Numer możesz znaleźć przechodząc do sekcji Użytkownicy -> Wszyscy użytkownicy, a następnie najeżdżając kursorem myszy na nazwę interesującego Cię użytkownika i spisując numer zaszyty w linku tej nazwy. Przykładowo – posiadam na jednej ze stron w spisie użytkowników 3 osoby, w tym usera o nazwie „Janina Przykładowa”. Po najechaniu na tę nazwę zobaczyłem odnośnik:
witrynanawczoraj.pl/wp-admin/user-edit.php?user_id=21&wp_http_referer=%2Fwp-admin%2Fusers.php
Pozornie wygląda to jak ciąg niezrozumiałych znaków, jednak po dokładnym wczytaniu się znaleźć możemy parametr user_id=21 i to 21 to właśnie ID użytkownika.
<body class="user-id-21">
Ale to nie wszystko. ID użytkownika to jedna informacja jaką chcemy zdobyć i umieścić w <body>. Drugą z nich – równie ważną – jest rola nazywana także jako Grupa.
Czym jest rola?
Aby zrozumieć czym jest rola warto wcześniej spojrzeć na użytkowników WordPressa jako na redakcję poczytnego czasopisma. Wśród członków redakcji będzie:
- Redaktor naczelny (Administrator) – może wszystko, od niego zależy ostateczny kształt numeru. Zarządza tekstami ale i całym zapleczem.
- Redaktor (Redaktor) – zajmuje się przygotowywaniem tekstów (wpisów) oraz zarządzaniem rubrykami stałymi (stronami)
- Redaktor na 1/2 etatu (Autor) – innymi słowy kontraktor lub stażysta zajmujący się przygotowywaniem tekstów (wpisów), nie edytuje rubryk stałych (stron)
- Wierny czytelnik (Subskrybent) – znany z imienia nazwiska przyjaciel redakcji. Można go spotkać wśród komentujących newsy na stronie redakcyjnej, uczestniczącego w dyskusjach na redakcyjnym forum.
Naszym zadaniem będzie wydobyć z WordPressa zarówno informację o zalogowanym użytkowniku (określić go przez jego numer ID) jak również jego roli i wpisać je do <body>. Co więcej, chcemy by tego typu informacje były w <body> zarówno widocznej strony, jak również zaplecza witryny.
Aby wydobyć tego typu informacje i wpisać je do body_class można skorzystać z poniższej funkcji:
add_filter( 'body_class', 'my_class_names' );
function my_class_names( $classes ) {
global $current_user;
$user_ID = $current_user->ID;
if(is_array($current_user->roles)) {
foreach($current_user->roles as $role) {
$classes[] = 'user-id-' . $user_ID;
$classes[]= 'user-role-' . $role;
}
}
// return the $classes array
return $classes;
}
add_filter('admin_body_class', function($classes) {
global $current_user;
$user_ID = $current_user->ID;
if(is_array($current_user->roles)) {
foreach($current_user->roles as $role) {
$classes .= "user-role-{$role} ";
$classes .= "user-id-{$user_ID} ";
}
}
// return the $classes array
return rtrim($classes);
});
Rzecz jasna tam, gdzie mamy wpisane „user-role-” oraz „user-id-” możemy wpisać dowolny ciąg znaków i to samo znadzie się w <body> przed numerem ID oraz rolą. Zachęcam do testowania i modyfikowania tej funkcji na swoje potrzeby.
Kiedy już mamy w <body> ID użytkownika, wtedy możemy przy pomocy kodu CSS ukryć np. element zaplecza strony. Przykładowo jeśli chciałbym ukryć dla użytkownika o ID 1 fragment strony, który nazywa się np. <div class=”ukryta”> (nazwę z kolei sprawdzamy pod prawym przyciskiem myszy wybierając Zbadaj element) mogę dopisać kod CSS
body.user-id-1 .ukryta {
display: none;
}
i tym samym ten element strony nie będzie widoczny tylko dla zalogowanego użytkownika, który posiada user_id=1
Na koniec przypomniam raz jeszcze, że ukrywanie elementów nie jest ich usuwaniem dla konkretnej grupy czy osoby – jest to ukrycie, które sprawnie posługujący się narzędziami do analizy strony użytkownik może odkryć nawet w kilkanaście sekund.
Pomogłem rozwiązać Twój problem? Wspieraj moje działania bym pisał więcej:
Komentarze — Napisz pierwszy komentarz
Czy powyższe wskazówki były skuteczne? Jeśli tak, podziel się swoimi spostrzeżeniami w komentarzu. Gdybyś chciał się podzielić ze mną skrawkiem kodu aby uzupełnić minikurs to skorzystaj z portalu pastebin.com i wyślij linka do kodu. Instrukcje jak to zrobić znajdziesz tutaj.