2019. 06. 24.
frissítve: 2022. 05. 15.
Olvasási idő: 8 perc
Plugout

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 a publish_product-ra
  • A WP_Query mellett létezik a WP_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!