Bardzo długo nie mogłem znaleźć dobrego, uniwersalnego rozwiązania do wysyłania powiadomień mailowych o zdarzeniach w WordPress. Przy okazji projektu dla klienta napisałem je więc sam. I wydaje mi się, że jest całkiem niezłe.
Notification, czyli powiadomienia mailowe w WordPress
Zasada działania jest bardzo prosta. W panelu administratora tworzymy nowe powiadomienie na zasadzie tworzenia nowego posta, wpisujemy temat wiadomości, wybieramy wyzwalacz (np. opublikowanie nowego posta), komponujemy treść wiadomości używając przy tym tagów i definiujemy nadawców. Wtyczka podpina się pod odpowiednią akcję i wysyła maila.
Ta wtyczka nie istnieje, ale nie możesz nazwać tak samo swojej
Robiąc research we wtyczkach, które już są w repozytorium, szukałem jakiejś ekstremalnie prostej nazwy. Wpisałem w pewnym momencie nazwę wtyczki „notification”, a na ekranie przywitała mnie najlepsza informacja jaka tylko mogła: Nie mogliśmy znaleźć tej wtyczki.
Bardzo entuzjastycznie podszedłem do skończenia kodu tak, aby wtyczka nadawała się do wysłania do repozytorium. Przecież nie mogę pozwolić na to, aby ktoś mi podebrał taką genialną nazwę. Skończyłem pisać plugin, wypełniłem formularz zgłoszeniowy na WordPress.org i… taka wtyczka już istnieje. Do oczu napłynęły łzy i do tej pory nie wiem czy to przez to czy przez cebulę, którą żona kroiła w kuchni. Następne parę godzin spędziłem na szlochaniu i zapijaniu smutku wodą oraz zagryzaniu jarmużem (hej, programiści są fit, wcale nie była to wódka i ogórki kiszone).
Wziąłem się jednak w garść, wlazłem na oficjalnego WordPressowego Slacka i zadałem w odpowiednim kanale pytanie czy przegrałem życie, czy może jest jakaś nadzieja. I dostałem odpowiedź, że jest!
Przy okazji odpaliłem SVN, ściągnąłem repozytorium tej rzekomo istniejącej wtyczki i osłupiałem. 5 lat temu wtyczka o takiej samej nazwie została zaakceptowana i utworzone zostało repozytorium. Od tamtej pory stało ono puste, ponieważ nikt nie wrzucił na nie jakiegokolwiek pliku.
Po wymianie kilku maili z Miką Epstein dostałem dostęp do owego repozytorium i prawa do niego zostały przeniesione na mnie, hurra!
Powiadamiaj o wszystkim!
No może na tą chwilę nie o wszystkim, ale taki jest ostateczny plan. Aktualnie można powiadamiać o publikacji, usunięciu i przesłaniu do akceptacji posta oraz strony. Do tego jest obsługa komentarzy, trackbacków i pingbacków, a powiadamiać można o: nowym komentarzu, akceptacji, cofnięciu akceptacji, oznaczeniu jako spam lub usunięciu.
Co do odbiorców, to na razie są 3 typy:
- Administrator – email administratora danej instancji WordPressa
- Email – dowolny adres email
- Tag – email wyrenderowany z tagu z danego wyzwalacza, np. adres email autora posta
W niedalekiej przyszłości planuję dodać więcej wyzwalaczy, jak np. akcje związanie z użytkownikiem (rejestracja, zalogowanie itd.), akcje związanie z mediami (dodanie, usunięcie mediów), powiadomienie o zaakceptowanym poście (czyli będzie można jego autorowi wysłać maila o treści: Hej, Twój post został opublikowany).
Marzą mi się również różne bramki powiadomień. Email jest oczywistym wyborem, ale co byś powiedział na powiadomienia push na telefon?
Koniecznie napisz w komentarzu, które chcesz w pierwszej kolejności, albo które najbardziej Ci się przyda!
A jak jestem developerem?
To super się składa, bo wtyczkę od początku pisałem z myślą o developerach. Można jej używać we własnym projekcie, podobnie jak Advanced Custom Fields. Postawiłem też na wygodę użycia, więc nie trzeba definiować wielu akcji, dostosowywać ścieżek, dołączać kilku plików. Wystarczy dołączenie jednego pliku z katalogu wtyczki i voila! Notification samo wykombinuje wszystkie ścieżki.
Sama możliwość dołączania wtyczki byłaby oczywiście bez sensu. Notification naszpikowane jest filtrami i akcjami. Można nawet wysłać powiadomienie o wysłaniu powiadomienia (nie polecam testować co się stanie).
Jak użyć w swoim projekcie? Dołącz Notification do swojego motywu lub wtyczki, odepnij wszystkie domyślne wyzwalacze za pomocą filtra i zdefiniuj własne wyzwalacze.
Proces definiowania własnego wyzwalacza jest bajecznie prosty. Najpierw rejestrujesz go definiując jego nazwę, grupę, szablon wiadomości i tagi, a później tylko wywołujesz odpowiednią funkcję przekazując do niej parametry. Proces rejestracji wyzwalacza opisałem w repozytorium.
„Chcem” to natychmiast!
Wtyczkę możesz znaleźć w oficjalnym repozytorium WordPress klikając na poniższą grafikę:
Drogi WordPressowiczu, czy na koniec mógłbym prosić Cię o zainstalowanie i przetestowanie wtyczki? Jeśli spodoba Ci się, oceń ją proszę w repozytorium. Twoja ocena będzie wielkim motywatorem do dalszej pracy. Dzięki!
Nie zapomnij podzielić się również swoimi przemyśleniami w komentarzu :)
Aha! Wtyczka oczywiście jest w pełni spolszczona.
Dzięki za przypomnienie :) Chętnie przetestuję.
Trafiłeś z tym ;)
Dlaczego trafiłem? :)
Bo akurat poszukiwałem.
Przy okazji dodałbyś wyzwalacz dla -> „Wpis zapisany jako szkic” oraz obsługę custom wpisy.
Ok, dzięki za sugestię :)
Też przetestuję :)
Przydatna wtyczka, ja napisałem swoją do logowania wszelkich zdarzeń. Już widzę, ze nie można ustawić więcej niż jeden trigger dla powiadomienia. Przydatne też byłoby wysyłanie powiadomień o konkretnej godzinie, np takie podsumowanie z danego dnia :)
Nie można ustawić więcej niż jednego triggera ponieważ zmieniają się merge tagi. Ciężko by to było rozwiązać technicznie.
Ale scheduler jest jak najbardziej cenną uwagą, dzięki :)
Wygląda ciekawe, przydałyby się powiadomienia typowe od strony bezpieczeństwa.
Dzięki. Mógłbyś rozwinąć te kwestie bezpieczeństwa? Domyślam się, że chodzi o jakieś wyzwalacze typu logowanie użytkownika do panelu admina?
Powiadomienia związane z włączaniem/zmianą ustawień, które mają wpływ na bezpieczeństwo. Dotyczy to nie tylko samego core WordPressa np. włączenie publikacji xmlrpc, modyfikacja sposobu akceptowania komentarzy, ale również notyfikacje dla „third party plugins/themes”, które mają wpływ na bezpieczeństwo. Myślę, że tutaj mogłaby z tego wyjść nawet fajna wtyczka premium, z integracjami dla zewnętrznych dodatków i templatek. Osoby – super administrator mogłyby mieć wgląd co jego ludzie robią na stronie, co zmieniają i kiedy. Takie opcje nawet sobie nie wyobrażasz jak bardzo są istotne na stronach zarządzanych przez wiele osób tj. większych portalach. Temat na nowe funkcje do przemyśleń :)
Planowałem płatne dodatki, ale integracja z trzecimi wtyczkami i motywami to raczej temat na czas kiedy wtyczka będzie już bardzo popularna. Co do samego powiadamiania o złośliwych działaniach na stronie to zastanawiam się czy jest sens. Ponieważ jeśli ktoś ma dostęp, aby takie ustawienie zmienić to może też na pewno wyłączyć wtyczkę. Ale z pewnością rozważę takie wyzwalacze :) Ba, nawet jak takich nie ma w core wtyczki, a potrzeba no to można je samemu dopisać :)
Coś nie bankla tak jak trza
Czysta instalacja.
Brak innych wtyczek
Szablon Twenty Sixteen
Powiadomienie o dodanym komentarzu
http://wklej.org/id/2921485/
PS. Można by pomyśleć o jakimś API SMS albo o jakiś powiadomieniach push
No i cykliczne powiadomienia
Oh, dzięki za zgłoszenie buga!
A później tylko jedziesz z ticketami na supporcie odpowiadając na pytania dlaczego tagi się nie renderują ;)
Fatal error: Can’t use function return value in write context in /wp-content/plugins/notification/inc/notification/triggers.php on line 94
O, to ciekawe. W jakiejś konkretnej sytuacji wraca taki fatal?
Zaraz po instalacji otrzymałem taką zwrotkę. Wstawiłem tą część w komentarz i poszło, następnie zablokowało mi dostęp do „Wpisów”.
Strona również została wyłączona.
Ok, dzięki wielkie za zgłoszenie. Fix poszedł i wersja 1.3.1 powinna być dostępna do aktualizacji w ciągu kilku minut
Dobrym ludziom trzeba pomagać, bardziej :)
Zawstydzasz mnie :) ale tak jak napisałeś – jakbyś czegoś potrzebował to wal jak w dym :)
Witam . Niestety nie zdefiniowano znacznik {permalink} w wyzwalaczu -dodano komentarz – bez tego dochodza widomosci ale nie wiadomo czego dotyczy komentarz i z jakiego wpisu czy strony pochodzi
Cześć, mógłbym prosić o screena albo opis miejsca gdzie ta informacja występuje?
Chodzi o to ze potrzebuwuje aby informacja o nowym komentarzu dochodziła na 2 rózne maile. Wybieram w wyzwalaczu „Dodano komentarz” a zdostepnych znaczników nie ma takiego który podaje w mailu czego dotyczył komentarz ,post _id podaje tylko numer posta, potrzebny jest URL posta. Wtyczka działa mail dochodzi ale potrzebuje wiedziec jaki wpis czy strona została skomentowana aby tego nie szukac.
Kolejny problem to gdy chciałem usunać strone wyskoczył Fatal error dotyczacy triggera. Musiałem usunac wtyczke by usunąć strone – niestety.
Aa teraz rozumiem :) dodam oczywiście, dzięki za sugestię! :)
Fatal errorowi się przyjrzę i również poprawię.
Obydwa zadania dodałem na githubie, gdzie możesz je śledzić: https://github.com/Kubitomakita/Notification/issues
Dodam jeszcze ze nie rejestrowałem wyzwalacza bo w respozytorium nie jest opisane jasno jaki plik mam edytowac i gdzie go mam szukac – dla beginnerów takich jak ja te informacje sa niezbedne :-)
Znacznik, który chcesz dodam więc nie ma potrzeby duplikowania wyzwalacza :)
A rejestrować i wyzwalać powiadomienia możesz wszędzie, gdzie tylko chcesz. Byle by później niż akcja init z priorytetem 5. Np. możesz zarejestrować akcję w functions.php motywu w akcji init, a później w dowolnym momencie wywołać funkcję notification()