E-mailek küldése a címzett nyelvén
Hogyan integrálhatják a téma- és bővítményfejlesztők a wp_mail() függvényt a WPML levelezési API-jával, és hogyan tárolhatják a címzettek nyelvét.
Fontos, hogy a webhely felhasználói a saját nyelvükön kapják az e-maileket. A WPML erre egy API-t kínál: eltárolja a felhasználó preferált nyelvét, és levélküldéskor alkalmazza. Ez a fejezet témák és bővítmények fejlesztőinek szól: azt mutatja meg, hogyan illeszthetik a termékeiket a szabványos wp_mail() függvényhez a preferált nyelv kezelésével.
Mikor kell nyelvenként levelet küldeni?
Szekció neve “Mikor kell nyelvenként levelet küldeni?”Néhány tipikus helyzet:
- Hírlevél. A webhely adminisztrátora francia, és a hírlevél-felületet franciául használja. Ennek eredménye: minden levél franciául megy ki. Az előfizetők a világ minden tájáról érkeznek, sokan nem értik a levelet.
- Közösségi oldal. A tagok fényképeket tesznek közzé, mások kedvelhetik őket, és a szerző e-mailben értesül. Mathias, aki német, közzétesz egy fotót. Pierre, a francia barátja, franciául böngészve megnyomja a Tetszik gombot. Mathias francia nyelvű értesítést kap.
- Webshop. Ha egy termék átmenetileg nem elérhető, a látogatók megadhatják az e-mail-címüket, hogy értesítést kapjanak. Egy japán látogató megadja az e-mail-címét. Aztán a spanyol adminisztrátor frissíti a készletet. A japán vásárló az automatikus „A termék ismét elérhető” levelet spanyolul kapja.
Ezekben az esetekben el kell tárolni a címzett preferált nyelvét, és a levél küldésekor átmenetileg erre a nyelvre kell váltani.
A wp_mail() körbefogása WPML-kóddal
Szekció neve “A wp_mail() körbefogása WPML-kóddal”Levélküldéskor három lépést kell a kódba tenned:
- Váltsd a nyelvi környezetet a címzett preferált nyelvére.
- Futtasd a levélküldő kódot.
- Válts vissza a webhely nyelvére.
A második lépés valószínűleg már megvan. Csak két WPML-specifikus sort kell hozzáadnod:
$email = get_option('receiver-email');
// Nyelvi környezet váltásado_action('wpml_switch_language_for_email', $email);
// a levélküldő kódod:$subject = __('Hello, World!', 'text-domain');
$message = __('This is our newsletter', 'text-domain');
wp_mail($email, $subject, $message);
// vissza a webhely nyelvéredo_action('wpml_restore_language_from_email');Két fontos szabályt tarts be.
1. A nyelvet az első levéltartalom lekérése előtt válts
Szekció neve “1. A nyelvet az első levéltartalom lekérése előtt válts”A nyelvváltás célja a levél tartalmának fordítása, ezért a helyes nyelvet még a tárgy vagy a levélszöveg lekérése előtt kell beállítani.
Ez nem működik:
$email = my_func_to_get_receiver_email();$subject = my_func_to_get_title(); // a webhely nyelvén jön$message = my_func_to_get_msg_body(); // a webhely nyelvén jön
do_action('wpml_switch_language_for_email', $email);wp_mail($email, $subject, $message);do_action('wpml_restore_language_from_email');Helyesen:
$email = my_func_to_get_receiver_email();do_action('wpml_switch_language_for_email', $email);$subject = my_func_to_get_title(); // a címzett nyelvén jön$message = my_func_to_get_msg_body(); // a címzett nyelvén jönwp_mail($email, $subject, $message);do_action('wpml_restore_language_from_email');2. Ne küldj címzettek tömbjének
Szekció neve “2. Ne küldj címzettek tömbjének”A wp_mail() elfogadja az e-mail-címek tömbjét, ám ha fordítható levéltartalmat akarsz, ez tilos.
Ez nem működik:
$emails = my_func_get_emails_array(); // array(email1, email2...)do_action('wpml_switch_language_for_email', $emails); // nem fog működni
$subject = my_func_to_get_title();$message = my_func_to_get_msg_body();do_action('wpml_restore_language_from_email');Írd át így:
$emails = my_func_get_emails_array(); // array(email1, email2...)
foreach ($emails as $email) : do_action('wpml_switch_language_for_email', $email); // így jó $subject = my_func_to_get_title(); $message = my_func_to_get_msg_body(); do_action('wpml_restore_language_from_email');endforeach;A címzett nyelvének tárolása
Szekció neve “A címzett nyelvének tárolása”WordPress-felhasználók
Szekció neve “WordPress-felhasználók”Ha a címzettek hagyományos WordPress-felhasználók, nem kell külön elmentened a nyelvi adatot, sem horgot (hook) készítened. Elég tájékoztatni őket, hogy a preferált nyelvüket a WordPress adminban, a Profilok → Saját profil oldalon állíthatják be.
Az adat egy szokásos user meta mezőben van. Ha mégis le akarod kérni:
$user = get_user_by( 'email', $email );if ( $user && isset( $user->ID ) ) { $lang = get_user_meta( $user->ID, 'icl_admin_language', true );}Nem WordPress-felhasználó címzettek
Szekció neve “Nem WordPress-felhasználó címzettek”Ha a bővítményed vagy témád elment egy e-mail-címet, a címzett preferált nyelvét is el kell mentened. Nincs szükség külön helyre vagy adattípusra, csak egy szűrőt kell hozzáadnod, amely visszaadja a nyelvi információt. A szűrő neve wpml_user_language:
add_filter('wpml_user_language', 'my_recipient_language', 10, 2);
function my_recipient_language($lang, $email) { return get_language_from_my_database($email); // ezt a függvényt neked kell megírnod}Nyelvválasztó a felületen
Szekció neve “Nyelvválasztó a felületen”Ha a bővítményed a feliratkozóknak konfigurációs panelt kínál a frontenden, megkérdezheted tőlük a nyelvet ezzel az action horoggal:
A [email protected] helyére az aktuális feliratkozó valódi e-mail-címe kerül.
Ez egy legördülő listát jelenít meg az elérhető nyelvekkel. Ha a feliratkozó választ, az érték AJAX-hívással a szerverre kerül. Ezt neked kell elmentened az adatbázis-tábláidba. Ehhez akaszd a wpml_user_language_switcher_save szűrőre a saját függvényedet:
add_filter('wpml_user_language_switcher_save', 'my_func', 10, 3);
function my_func($saved, $email, $language) { // az e-mail-cím és a nyelv párosának mentése, például: save_language_in_my_database($email, $language); // ha sikeresen mentetted, térj vissza true értékkel return true;}Ha a szűrő nem ad vissza true értéket, vagy egyáltalán nincs ilyen szűrőd, a WPML a nyelvi információt a user meta táblába próbálja menteni.
Nem tárolt címekre küldés
Szekció neve “Nem tárolt címekre küldés”Néha olyan címre kell levelet küldeni, amely nincs egyik adatbázistáblában sem, így a nyelvi preferenciája sincs eltárolva. Ilyenkor a WPML azt várja, hogy a nyelvkód ezen három globális változó egyikében elérhető:
$_POST['wpml_user_email_language']$_GET['wpml_user_email_language']$GLOBALS['wpml_user_email_language']
Az e-mailek fordítása
Szekció neve “Az e-mailek fordítása”A levéltartalom fordítása ugyanúgy megy, mint bármely más sztringé a webhelyen (lásd: Sztringek fordítása). Röviden, a levél tárgyára és szövegére ezeknek kell teljesülniük:
- Ha statikus sztringek, lokalizáld őket Gettext-függvényekkel (
_e()vagy__()). - Ha a WordPress opciók táblájában vannak mentve, és a
get_option()függvénnyel olvasod őket, jelezned kell a WPML-nek, hogy ezek is fordíthatók. Ezt a nyelvi konfigurációs fájllal teheted meg (lásd: A wp_options táblában tárolt szövegek fordítása).
Ha a bővítményed vagy témád megfelel ezeknek, a felhasználók le tudják fordítani a szövegeket a WPML → String Translation oldalon.
Készült: