WPML

חשוב לשלוח אימיילים למשתמשי האתר שלך בשפה המועדפת עליהם. למטרה זו, WPML מציע API לשמירת השפה המועדפת על המשתמש בזמן שהוא משתמש באתר, ולאחר מכן להחיל את ההעדפה הזו בעת שליחת אימיילים אליו.

מסמך זה מסביר למפתחי תוספים וערכות עיצוב כיצד לשלב את המוצרים שלהם עם הפונקציה הסטנדרטית של WordPress, wp_mail(), בהקשר של השפה המועדפת.

מתי עליך לשלוח אימיילים שעברו לוקליזציה לכל משתמש?


להלן דוגמאות הממחישות כמה מקרים אופייניים שבהם עליך לשלוח אימיילים בשפה המועדפת על המשתמש:

  • אתה מנהל אתר ששולח ניוזלטר למנויים: מנהל האתר הוא צרפתי והוא מציג ממשק ניוזלטר בשפה הצרפתית. התוצאה: כל האימיילים יישלחו בצרפתית. מכיוון שהמנויים שלך מגיעים מכל רחבי העולם, רבים לא יבינו את האימייל הזה.

  • אתה מנהל אתר רשת חברתית: חברים באתר זה יכולים לפרסם את התמונות שלהם. חברים אחרים יכולים לסמן לייק ולדרג את התמונות האלו בכוכבים – כשהם מסמנים לייק, מחבר התמונה יקבל על כך הודעה באימייל. כעת שקול את התרחיש הבא:

    1. מתיאס, שהוא גרמני, פרסם את התמונה שלו.

    2. חברו פייר, שהוא צרפתי, נתקל בתמונה של מתיאס ולוחץ על הכפתור Like (לייק).

    3. מכיוון שבמהלך פעולה זו, פייר הציג את העמוד בצרפתית, מתיאס יקבל התראת אימייל בצרפתית.

  • אתה מנהל אתר מסחר אלקטרוני: אם מוצר מסוים אינו זמין זמנית, משתמשים יכולים להשאיר את האימייל שלהם כדי לקבל עדכון כשהמוצר יחזור למלאי. מבקר יפני משאיר את האימייל שלו תחת אחד המוצרים. לאחר מכן, מנהל האתר, שהוא ספרדי, מעדכן את הזמינות. התוצאה: הלקוח היפני מקבל אימייל אוטומטי "המוצר x זמין שוב" בספרדית, ולא ביפנית.

ישנן עוד דוגמאות רבות דומות, ואתה האדם המושלם לדעת אם הדבר יהווה בעיה עבור התוסף או ערכת העיצוב שלך.

בכל המקרים האלו עלינו לשמור בדרך כלשהי את השפה המועדפת על הנמען ולאחר מכן, להחליף לרגע לשפה זו בעת שליחת אימיילים.

עטיפת הפונקציה wp_mail() עם קוד ספציפי ל־WPML


בעת שליחת אימיילים עליך להוסיף שלושה שלבים נוספים לקוד התוסף או ערכת העיצוב שלך:

  1. החלף את הקשר השפה לשפה המועדפת על נמען האימייל.

  2. לאחר מכן הפעל את כל הקוד שלך לשליחת האימייל בפועל.

  3. החלף את השפה בחזרה לשפת האתר.

השלב השני ככל הנראה מוכן בשלב זה. הדבר היחיד שנותר לעשות הוא להוסיף שתי שורות נוספות, ספציפיות ל־WPML – עליך להוסיף רק את השורות המודגשות.
$email = get_option('receiver-email');

// Switch language context…
do_action('wpml_switch_language_for_email', $email);

// your code for sending email:
$subject = __('Hello, World!', 'text-domain');

$message = __('This is our newsletter', 'text-domain');

wp_mail($email, $subject, $message);

// switch language back
do_action('wpml_restore_language_from_email');

כפי שניתן לראות, השינויים קטנים אך עליך לזכור את שתי הנקודות החשובות הבאות.

1. החלף את השפה לפני שליפת תוכן האימייל הראשון


זכור שאתה מחליף את השפה כדי לתרגם את תוכן האימייל. לכן עליך לזכור להגדיר את השפה הנכונה לפני שאתה שולף תוכן כלשהו של אימייל – נושא או תוכן ההודעה.

הקוד הבא לא יעבוד:

$email = my_func_to_get_receiver_email();
$subject = my_func_to_get_title(); // will come in site’s lang
$message = my_func_to_get_msg_body(); // will come in site’s lang

do_action('wpml_switch_language_for_email', $email);
wp_mail($email, $subject, $message);
do_action('wpml_restore_language_from_email');

במקום זאת עליך להשתמש בזה:

$email = my_func_to_get_receiver_email();
do_action('wpml_switch_language_for_email', $email);
$subject = my_func_to_get_title(); // will come in receiver’s lang

$message = my_func_to_get_msg_body(); // will come in receiver’s lang
wp_mail($email, $subject, $message);
do_action('wpml_reset_language_after_mailing');

2. אל תשלח אימיילים למערך של נמענים


הפונקציה wp_mail() מאפשרת להעביר את $email כפרמטר מערך של אימיילים. למרבה הצער, הדבר אסור אם ברצונך לאפשר תרגום של תוכן האימייל.

לכן, אם יש לך קוד שאינו עובד, כמו הקוד הזה:

$emails = my_func_get_emails_array(); // array(email1, email2...)
do_action('wpml_switch_language_for_email', $emails); // will not work

$subject = my_func_to_get_title();
$message = my_func_to_get_msg_body();
do_action('wpml_restore_language_from_email');

עליך לשכתב אותו כך:

$emails = my_func_get_emails_array(); // array(email1, email2...)

foreach($emails as $email) :
do_action('wpml_switch_language_for_email', $email); // now is ok
$subject = my_func_to_get_title();
$message = my_func_to_get_msg_body();
do_action('wpml_restore_language_from_email');
endforeach;

שמירת שפת הנמען

מידע על שפה עבור משתמשי WP


אם הנמענים שלך רשומים כמשתמשי WordPress סטנדרטיים, אינך צריך לשמור את המידע על השפה וליצור הוק. תוכל פשוט ליידע את המשתמשים שלך שהם יכולים להגדיר את השפה המועדפת עליהם באזור הניהול של WordPress תחת פרופיל->הפרופיל שלך.

מידע זה נשמר בשדה מטא רגיל של משתמש, כך שאם מסיבה כלשהי תרצה לשלוף אותו, תוכל להשתמש בקטע הקוד השימושי הבא:

$user = get_user_by( 'email', $email );
if ( $user && isset( $user->ID ) ) {
 $lang = get_user_meta( $user->ID, 'icl_admin_language', true );
}

כאשר הנמענים אינם משתמשי WP רגילים


בכל פעם שהתוסף או ערכת העיצוב שלך רושמים כתובת אימייל, עליך לשמור גם את השפה המועדפת על הנמען. אינך זקוק למקום מיוחד או לסוג נתונים מיוחד לשם כך. הדבר היחיד שעליך לעשות הוא להוסיף פילטר שיחזיר את המידע על השפה. שם הפילטר הוא wpml_user_language.

קוד לדוגמה שעליך ליישם עשוי להיראות כך:

add_filter(‘wpml_user_language’, ‘my_recipients_language’, 10, 2);

function my_recipient_language($lang, $email) {
return get_language_from_my_database($email); // implement it in  your plugin/theme
}

וידג'ט שפה


אם אתה מספק ממשק משתמש בצד הלקוח עם פאנל הגדרות עבור המנויים שלך, תוכל לבקש מהם לבחור את שפתם באמצעות ה־action hook הבא:
do_action('wpml_user_language_switcher', array('mail'=>'mail@example.com') );

שים לב שעליך להחליף את mail@example.com באימייל האמיתי של מנוי נוכחי.

קוד זה יציג תיבת בחירה עם השפות הזמינות. כאשר מנוי בוחר בשפה, ערך זה יישלח לשרת באמצעות קריאת AJAX.

לאחר מכן, עליך לשמור נתונים אלו בטבלאות מסד הנתונים שלך. כדי לעשות זאת, הוסף הוק עבור הפילטר wpml_user_language_switcher_save, כך:

add_filter('wpml_user_language_switcher_save', 'my_func', 10, 3);

function my_func($saved, $email, $language) { // your code to save email - language pair, i.e.:
save_language_in_my_database($email, $language);
// if you saved data correctly, return true
return true;
}

אם הפילטר שלך לא יחזיר ערך true, או שאין לך פילטר לכך כלל, WPML ינסה לשמור את המידע על השפה בטבלת המטא של המשתמש (ראה פרק הבא).

שליחת אימיילים לכתובות שאינן שמורות


לפעמים עליך לשלוח אימיילים לכתובות שאינן נמצאות באף טבלת מסד נתונים. מכיוון שהנמענים אינם נמצאים במסד הנתונים שלך, אינך שומר גם את העדפות השפה של נמען כלשהו.

במקרים אלו, WPML מצפה שקוד השפה יהיה זמין באחד משלושת המשתנים הגלובליים הבאים:


  • $_POST['wpml_user_email_language']

  • $_GET['wpml_user_email_language']

  • $GLOBALS['wpml_user_email_language']

כיצד לתרגם אימיילים


תרגום תוכן אימיילים מתבצע בדיוק כמו תרגום של כל מחרוזת אחרת באתר שלך. למידע מפורט יותר בנושא זה, בקר בעמוד התיעוד של תרגום מחרוזות שלנו.

בקצרה, ודא שהתנאים הבאים חלים על כל המחרוזות המשמשות כתוכן אימייל (נושא או גוף ההודעה):


  • אם אלו מחרוזות סטטיות, ודא שהן עברו לוקליזציה עם פונקציות gettext כמו _e() או __()).

  • אם הן נשמרות בטבלת האפשרויות של WordPress ונשלפות באמצעות הפונקציה get_option(), עליך "ליידע" את WPML שגם הן ניתנות לתרגום. הדבר נעשה באמצעות קובץ תצורת השפה.

אם תנאים אלו מתקיימים בתוסף או בערכת העיצוב שלך, המשתמשים יוכלו לתרגם אותן בעמוד WPML->תרגום מחרוזות.

דוגמה מעשית


כדי לראות דוגמה מעשית יותר של המידע המוצג בעמוד זה, בקר בפוסט הבלוג שלנו על שימוש בשילוב WPML Mail API עם התוסף Sensei.

נכתב על ידי Amir · עודכן לאחרונה: 18 באוקטובר 2024