Felhasználók automatikus értesítése új termék feltöltése esetén
Ha vásárlóid egyben a rajongóid is, és tűkön ülve várják, hogy egy újabb terméked megjelenjen, ez a snippet segíthet: automatikusan értesíti minden vásárlódat akkor, ha új termék került fel a WooCommerce webshopodba.
Egy korábbi bejegyzésben már érintettük a mai témát, igazából csak egy kis fűszerezéssel látjuk el: a mai bejegyzés nem lesz más, mint az Egyszerű értesítő plugin WordPress-hez bejegyzés, újramelegítve.
Rövid emlékeztető:
- Ahogy a rendelések, úgy a termékek is post-ok, így azoknak az állapotváltozásaira is tudunk figyelni: emlékszünk, hogy a
${POST_STATUS}_${POST_HANDLE}
formátumú hook-ra kell figyelnünk, jelen esetben tehát apublish_product
-ra - A
WP_Query
mellett létezik aWP_User_Query
, amivel felhasználókat lehet lekérdezni az adatbázisból
Tehát amit tenni fogunk: lekérdezzük (query_users_to_notify
) az összes, általunk meghatározott kritériumoknak megfelelő felhasználót (jelen esetben mindenkit, akinek a szerepköre Customer
), és ha találunk ilyet, akkor mindegyiknek kiküldünk egy egyszerű értesítést (meghívjuk a send_notification
függvényünket, ami a wp_mail()
függvény használatával kiküldi a leveleket).
Fontos: ahhoz, hogy a levelek biztosan célba érjenek a "rajongóinkhoz", érdemes egy lehet egy külső SMTP szolgáltatót használni, és azt a WordPressben levélküldéshez beállítani.
Elég a dumából, kezdjünk neki: a megszokott módon hozzunk létre egy fájlt az mu-plugins mappánkban, nevezzük mondjuk notify_users_on_product_publish.php
-nek, és másoljuk be az alábbi tartalmat:
Készen is vagyunk, tehát ha ezt - ne adj'Isten - az éles oldaladra dobtad fel kapásból, akkor arra figyelj, hogy csak akkor tedd közzé az újabb termékedet, ha már teljesen elkészültél a feltöltésével.
Figyelem! A jelen #plugout
bizonyos esetekben NAGYON lelassíthatja az oldaladat, illetve nem várt mellékhatásokkal járhat:
- Tömeges termék import esetén a
publish_product
esemény sokszor történik meg (minden termék esetében egyszer), és ilyenkor mindig egyszer lekéri az összes felhasználódat, majd mindegyik felhasználónál végrehajt egy külső hívást a WordPress. Tehát: 100 regisztrált vásárló és 10 termék importja esetén 10-szer kéri le az összes felhasználót, minden lekérésnél egyesével kiküld egy levelet. Tehát viszonylag rövid időn belül kimegy 1000 levél - ez hosszabb idővel járhat ezért: figyelj a PHP timeoutra, illetve ne légy türelmetlen. :) - A fentinek egy enyhébb módja egy új termék mentése esetén jelentkezik: a termék mentése a szokásosnál hosszabb ideig fog tartani, hiszen minden felhasználó esetében ki kell küldeni az értesítő levelet.
- Amennyiben egy külső szolgáltatót használsz a levelek kézbesítésére, a levélküldés viszonylag hosszú ideig (1-2 másodperc) is eltarthat. Ez azt jelenti, hogy ha 1000 felhasználónak küldene a rendszer levelet, akkor akár 15-20 percig is tarthat egy termék mentése.
A WordPress fejlesztők és felhasználók csoportban merült fel a kérdés egy posztban - köszi a témáért, Karesz!