✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Korzystanie z rejestru, subskrybentów i usług w WordPress

9

TL; DR: Uważam, że korzystanie z rejestru, subskrybentów i usług jest bardzo przydatne podczas tworzenia wtyczek i narzędzi dla WordPressa zorientowanych na backend. Ten post pokazuje, jak to zrobić.


Po latach pracy z wzorcami projektowymi, programowaniem obiektowym i WordPressem z pewnością pojawią się powszechne sposoby rozwiązywania problemów.

W ten sposób na początku otrzymaliśmy wzorce projektowe zorientowane obiektowo, więc może jest to odmiana zorientowana na WordPressa.

Chociaż pisałem o takich rzeczach, jak rejestry w poprzednich artykułach (i tych, które nie są nawet tak stare ), nigdy nie jest złym pomysłem, aby wrócić do tego samego tematu, zwłaszcza gdy jest coś do dodania do poprzedniego ujęcia.

Rejestr, subskrybenci i usługi

Wszystko opisane poniżej należy rozumieć w kontekście wtyczki WordPress. Oznacza to, że nie należy tego odczytywać jako sposobu pracy z innymi frameworkami, językami, aplikacjami lub używania go z innymi wzorcami.

Pamiętaj o tym czytając to.


W każdym razie ogólna idea połączenia tych typów obiektów jest następująca:

  1. Rejestr obsługuje wszystkich subskrybentów,
  2. Subskrybenci nasłuchują haczyków w WordPressie (tych, które istnieją, a nawet niestandardowych haczyków),
  3. Usługi wykonują rzeczywistą pracę, gdy subskrybent je wysyła.

Celem jest jedno miejsce do rejestracji klas odpowiedzialnych za wysyłanie pracy. Otóż ​​to.

Co więcej, ułatwia to również oddzielenie rzeczy, dzięki czemu jeśli chcesz testować swoje usługi w izolacji, jest to znacznie łatwiejsze, ponieważ niekoniecznie są one ściśle powiązane z WordPress. A jeśli tak, to możesz zakpić dane, które należy przekazać do danej funkcji, a następnie ocenić wynik.

Nie jest to jednak artykuł o testowaniu, więc wróćmy do samych klas.

Rejestr

Z definicji celem rejestru jest śledzenie rzeczy. Jeśli chodzi o implementację tego wzorca w WordPressie, chodzi o to, aby rejestr mógł śledzić subskrybentów (co zdefiniuję w dalszej części tego artykułu).

Korzystanie z rejestru, subskrybentów i usług w WordPress

Zdjęcie: Denny Müller na Unsplash

Co więcej, chodzi o to, że gdy nadejdzie czas, który prawdopodobnie będzie inny, niezależnie od struktury wtyczki, wszyscy subskrybenci będą instancjami. Do tego momentu prawdopodobnie będziesz chciał to zrobić na początku cyklu życia WordPressa.

To powiedziawszy, oto przykład kodu do rejestracji subskrybentów:

private $subscribers = [ AssetSubscriber::class, // ... DeletedUserSubscriber::class, ];

Poniżej znajduje się funkcja tworzenia instancji subskrybentów.

Bloki te mogą być częścią tej samej funkcji lub mogą być oddzielne w zależności od potrzeb.

Subskrybenci

Jak wspomniano, subskrybenci są sposobem na:

  1. Posłuchaj pewnego haka w WordPress
  2. Dispatch a Service, aby wykonał jakąkolwiek pracę przewidzianą dla danego hooka.

Załóżmy więc na chwilę, że chcesz coś zrobić po usunięciu użytkownika. Chcesz utworzyć wystąpienie usługi za pośrednictwem subskrybenta za każdym razem, gdy nastąpi to przechwycenie.

Korzystanie z rejestru, subskrybentów i usług w WordPress

Zdjęcie autorstwa Lee Campbella na Unsplash

Jako przykład:

Zauważ, że subskrybent jest świadomy usługi (chociaż nie jest od niej uzależniony, ponieważ jest po prostu pośrednikiem między WordPressem a usługą) i określa podpięcie do usługi, której instancję tworzy.

Usługi

Wreszcie, usługi to obiekty, które wykonują wszystkie ciężkie operacje we wtyczce. Oznacza to, że jeśli muszą czytać lub zapisywać do bazy danych, systemu plików, sieci, danych procesowych itp., wszystko dzieje się w ich kontekście.

Korzystanie z rejestru, subskrybentów i usług w WordPress

Zdjęcie autorstwa Erika Mcleana  na Unsplash

Mogą być świadomi innych klas, mogą nie być. Mogą implementować interfejs lub klasę abstrakcyjną lub nie. To naprawdę wykracza poza zakres tego postu. Ale chodzi o to, że używając haka z góry jako przykładu, jeśli chcesz coś zrobić po usunięciu użytkownika, robisz to w ramach usługi.

Na przykład:

class DeletedUserService { public function add(string $hook) { add_action($hook, [$this, 'deletedUser'], 99, 1); } public function deletedUser(int $userId) { $user = get_userdata($userId); if (false === $user) { return; } // Do work with the user that's being deleted. } }

I to koniec. Po uruchomieniu usługi kontrola zostanie zwrócona do WordPress, a aplikacja będzie kontynuować normalne działanie.

Teraz wszyscy razem

Zakładając, że masz plik ładujący dla swojej wtyczki, który większość robi w tym miejscu, gdzie jest zdefiniowana wymagana wtyczka, wymagany jest autoloader i następuje instancja samej wtyczki.

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów