Tovább a tartalomhoz

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.

Levélküldéskor három lépést kell a kódba tenned:

  1. Váltsd a nyelvi környezetet a címzett preferált nyelvére.
  2. Futtasd a levélküldő kódot.
  3. 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ása
do_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ére
do_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ön
wp_mail($email, $subject, $message);
do_action('wpml_restore_language_from_email');

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;

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 );
}

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
}

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:

do_action('wpml_user_language_switcher', array('mail' => '[email protected]'));

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.

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']

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások