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.

 
Będzie nam w takim razie zależało na wyciągnięciu tej cyfry i wpisaniu w body tak, aby miało ono postać:
<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);
});

   Pobierz snippet

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.

UDOSTĘPNIJ

Pomogłem rozwiązać Twój problem? Wspieraj moje działania bym pisał więcej: