12 października 2020

Panel klienta, strefa użytkownika w WordPress

Kategoria: Programowanie
Tagi: dla profesjonalistów, WordPress,
Autor: Paweł Mansfeld

W artykule dotyczącym rejestracji i logowania użytkowników w WordPress poruszyliśmy przy okazji temat strefy użytkownika bądź też panelu klienta. Otrzymywałem zapytania oraz pojawiły się komentarze dotyczące głównie tego fragmentu – czyli jak móc edytować jakąś treść dla danego klienta. W tym wpisie pokażę, że jest to bardzo proste i praktycznie cały panel lub strefę można sobie „wyklikać”. Najwięcej pracy jest tak naprawdę z tworzeniem własnych szablonów, zakładając, że chcemy aby panel był atrakcyjny dla użytkownika.

Przypomnijmy, że zarejestrowani użytkownicy – niezależnie, czy rejestrowali się samodzielnie czy konta utworzył administrator – są widoczni w panelu administracyjnym na podstronie Użytkownicy:

Lista zarejestrowanych użytkowników WordPress

Po kliknięciu na dane konto, mamy do dyspozycji dedykowaną stronę, gdzie domyślnie może edytować szczegóły dotyczące konta każdego użytkownika:

Wydaje się zatem racjonalnym aby to tutaj umieścić dodatkowe kontrolki i formularze do zarządzania panelem klienta. Zresztą twórcy WooCommerce wpadli na podobny pomysł i to tutaj możemy edytować adresy zamieszkania i dostawy, które pochodzą ze sklepu internetowego.

W tym samym artykule pokazywałem też jak nadawać dodatkowe uprawnienia użytkownikom i np. odkryć przed nimi treść prywatnych postów. Rozwiązanie spełnia swoje zadanie jeżeli nie chcemy zarządzać treścią dla każdego użytkownika z osobna. Aby mieć możliwość edycji strefy użytkownika dla każdego z osobna mamy wiele możliwości. Poniżej kilka propozycji.

Panel klienta WordPress za pomocą edycji użytkownika i własnych pól

Pierwszym pomysłem na jaki można wpaść to użycie własnych / niestandardowych pól WordPress z wtyczką ACF Pro. W ten sposób można przydzielać użytkownikom pliki, dokumenty galerie czy rozbudowany tekst. Praktycznie wszystko co przyjdzie nam do głowy. W ACF tworzę grupę pól o nazwie „Panel klienta” i dodaję potrzebne formularze. Pomocne mogą okazać się „pola powtarzalne” lub nawet „elastyczna treść” aby móc stworzyć coś na kształt spersonalizowanego feeda:

Kiedy przejdziemy na stronę edycji użytkownika, naszym oczom ukażą się dodatkowe pola gdzie możemy dodać dokumenty lub przykładową galerię:

Edycja zawartości przykładowego panelu klienta

Tak dodane treści można z łatwością wyciągnąć za pomocą standardowych metod znanych z ACF. W artykule o rejestracji logowaniu pokazywałem jak pobrać ID ale powtórzmy:

Najpierw dobrze jest sprawdzić czy w ogóle użytkownik jest zalogowany:

if ( is_user_logged_in() ) {
   echo 'Witaj w panelu!';
   <?php $user_id = get_current_user_id();

Zmienna $user_id przechowuje niepowtarzalny numerek klienta. Dodajmy jeszcze prefix „user_” tak jak tego wymaga ACF:

$user_acf_prefix = 'user_';
$user_id_prefixed = $user_acf_prefix . $user_id;
?>

Pobierzmy sobie teraz przykładową liste plików w formie linków do pobrania:

<?php if ( have_rows( 'dokumenty', $user_id_prefixed ) ) : ?>
   <?php while ( have_rows( 'dokumenty', $user_id_prefixed ) ) : the_row(); ?>
      <?php $ = get_sub_field( '' ); ?>
      <?php if ( $ ) { ?>
         <a href="<?php echo $['url']; ?>"><?php echo $['filename']; ?></a>
      <?php } ?>
   <?php endwhile; ?>
      <?php else : ?>
   <?php // no rows found ?>
<?php endif; ?>

Oraz galerię:

<?php $galeria_images = get_field( 'galeria', $user_id_prefixed ); ?>
<?php if ( $galeria_images ) : ?>
   <?php foreach ( $galeria_images as $galeria_image ): ?>
      <a href="<?php echo $galeria_image['url']; ?>">
      <img src="<?php echo $galeria_image['sizes']['thumbnail']; ?>" alt="<?php echo $galeria_image['alt']; ?>" />
</a>
      <p><?php echo $galeria_image['caption']; ?></p>
   <?php endforeach; ?>
<?php endif; ?>

To jak będzie wyglądał panel i poszczególne treści zależy całkowicie od nas.

Strefa klienta WordPress za pomocą relacji pomiędzy postami

Strefę klienta można wzbogacić w posty przeznaczone tylko dla konkretnego użytkownika. Można ale nie trzeba stworzyć własny typ postu aby oddzielić je od innych treści na naszej stronie.

Wystarczy dodać do postu jedno niestandardowe pole „Użytkownik”. Oczywiście, użyjemy do tego ACF:

Tworzenie strefy klienta za pomocą przypisywania postów do użytkowników

Od teraz pod każdym postem będziemy mogli wybrać dla którego z użytkowników post ma być widoczny:

Przypisywanie postu do konkretnego użytkownika/klienta

Aby zabezpieczyć sytuację, że ktoś próbuje wejść na post, który nie jest przeznaczony dla niego wystarczy w szablonie postu wykonać proste porównanie. Najpierw wyciągnijmy ID zalogowanego użytkownika.

if ( is_user_logged_in() ) {
<?php $user_id = get_current_user_id();

Jak wyciągnąć ID użytkownika do którego adresujemy post?

$adresat_array = get_field( 'adresat' );
$adresat_id = $adresat_array["ID"]; ?>

Wystarczy teraz sprawdzić czy ID są takie same:

if ($user_id == $adresat_id){
 echo "Oto twój post:";
}

Zmienna $adresat_array przechowuje tablicę z danymi użytkownika. Są tam od razu inne dane klienta, które możemy wykorzystać w skrypcie. Zachęcam do zapoznania się z tymi polami za pomocą funkcji var_dump();

Strefa premium za pomocą wtyczki WooCommerce Memberships

Kolejnym rozwiązaniem, które jest stosunkowo proste w użyciu polega na wykorzystaniu WooCommerce i wtyczki WooCommerce Memberships. Możemy ustawić, że jedynym warunkiem posiadania aktywnego członkostwa jest sama rejestracja lub ręczna akacja administratora.

We wtyczce WooCommerce memberships możemy wybrać czy ograniczony dostęp ma być zastosowany dla poszczególnych postów, kategorii czy tylko wybranych fragmentów postów i stron. Dodatkową zaletą tego rozwiązania jest możliwość automatyzacji tworzenia kont i możliwości pobierania opłaty za dostęp do strefy premium a także wdrożenie subskrypcji z cykliczną płatnością.

Czytaj więcej w artykule: Płatna strona WordPress z kontami premium i subskrypcjami.

Inne wtyczki do panelu użytkownika i strefy klienta

Istnieją wtyczki do paneli klienta. Mogą one nie mieć funkcji na których nam zależy ale na pewno będą mały wiele funkcjonalności, z których nigdy nie będziemy korzystać :). Niektóre z nich to:

  • Frontend Dashboard,
  • Ultimate Member – User Profile, User Registration, Login & Membership Plugin,
  • Ultimate Client Dash,
  • WP User Manager – User Profile Builder & Membership

Osobiście unikam cudzych wtyczek, bo kodowanie samemu tak prostych funkcjonalności w WordPressie nie jest trudne i za pewne gwarantuje większe bezpieczeństwo, szybkość działania i brak problemów z kompatybilnościami, zależnościami oraz opłat z powodu funkcji premium.

Dodatek 1: Strona WordPress tylko dla zalogowanych

Aby zablokować możliwość dostępu do strony użytkownikom nie zalogowanym i udostępnić ją tylko dla zalogowanych można wykorzystać rozwiązanie z postami prywatnymi:

Oznaczenie postu jako prywatny

Następnie, subskrybentom udzielamy uprawnienia do czytania tego typu postów. Można je następnie wyświetlić w szablonie panelu lub strefy klienta używając argumentu ‚post_status’ => ‚private’ za pomocą takiej petli:

<?php
global $post;
$args = array('posts_per_page'=>64, 'post_status' => 'private'');
$myposts = get_posts( $args );
foreach ($myposts as $post) : setup_postdata($post); ?>

<a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3>

<?php endforeach;
wp_reset_postdata();?>

Instrukcję dot. przyznawania dodatkowych uprawnień subskrybentom znajdziesz w artykule dotyczącym rejestracji i logowania w WordPress.

Dodatek 2: Zabezpieczenie hasłem podstrony WordPress

Najprostszym sposobem na ograniczenie dostępu do strony, który nawet nie wymaga rejestracji i logowania to zabezpieczenie hasłem:

Ochrona hasłem podstrony WordPress

Takie rozwiązanie może się przydać kiedy chcemy szybko mieć możliwość ograniczenia dostępu do wybranej strefy.

Podsumowanie

Jak widać jest wiele możliwości stworzenia panelu klienta w WordPressie. To jak wygląda panel i jakie możliwości udostępnia zależy całkowicie od nas – deweloperów.

Źródła

https://www.advancedcustomfields.com/resources/user/

https://developer.wordpress.org/reference/classes/wp_user/

Oceń artykuł na temat: Panel klienta, strefa użytkownika w WordPress
Średnia : 4.8 , Maksymalnie : 5 , Głosów : 4


 

Odpowiedz lub skomentuj

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


 

Wykryto brak połączenia z Internetem.