يُعد إرسال رسائل البريد الإلكتروني إلى مستخدمي موقعك باللغة التي يفضلونها أمراً مهماً. لهذا الغرض، يقدّم WPML واجهة API لتخزين اللغة المفضلة للمستخدم أثناء استخدامه للموقع، ثم تطبيق هذا التفضيل عند إرسال رسائل البريد الإلكتروني إليه.
يشرح هذا المستند لمطوري الإضافات والقوالب كيفية دمج منتجاتهم مع دالة WordPress القياسية wp_mail() في سياق اللغة المفضلة.
متى تحتاج إلى إرسال رسائل بريد إلكتروني مترجمة لكل مستخدم؟
إليك أمثلة توضح بعض الحالات النموذجية التي تحتاج فيها إلى إرسال رسائل بريد إلكتروني باللغة المفضلة للمستخدم:
- أنت مدير موقع يرسل نشرة بريدية للمشتركين: مدير الموقع فرنسي ويعرض واجهة النشرة البريدية باللغة الفرنسية. النتيجة: ستُرسل جميع رسائل البريد الإلكتروني باللغة الفرنسية. وبما أن المشتركين لديك يأتون من جميع أنحاء العالم، فلن يفهم الكثيرون منهم هذه الرسالة.
- أنت تدير موقع تواصل اجتماعي: يمكن لأعضاء هذا الموقع نشر صورهم. ويمكن للأعضاء الآخرين الإعجاب بهذه الصور وتمييزها بنجمة - وعندما يعجبون بها، سيتم إبلاغ صاحب الصورة عبر البريد الإلكتروني. تخيل الآن هذا السيناريو:
- نشر Mathias، وهو ألماني، صورته.
- صادَف صديقه Pierre، وهو فرنسي، صورة Mathias ونقر على زر إعجاب.
- ولأن Pierre كان يعرض الصفحة باللغة الفرنسية أثناء هذا الإجراء، سيتلقى Mathias إشعاراً عبر البريد الإلكتروني باللغة الفرنسية.
- أنت تدير موقع تجارة إلكترونية: إذا كان أحد المنتجات غير متوفر مؤقتاً، يمكن للمستخدمين ترك بريدهم الإلكتروني لإبلاغهم عند توفر المنتج مرة أخرى. يترك زائر ياباني بريده الإلكتروني أسفل بعض المنتجات. ثم يقوم مدير الموقع، وهو إسباني، بتحديث حالة التوفر. النتيجة: يتلقى العميل الياباني رسالة بريد إلكتروني تلقائية «المنتج x متوفر مرة أخرى» باللغة الإسبانية، وليس باللغة اليابانية.
هناك العديد من الأمثلة المشابهة الأخرى، وأنت الشخص الأنسب لمعرفة ما إذا كان هذا سيمثل مشكلة لإضافتك أو قالبك.
في جميع هذه الحالات، نحتاج بطريقة ما إلى تخزين اللغة المفضلة للمستلم، ثم التبديل مؤقتاً إلى هذه اللغة أثناء إرسال رسائل البريد الإلكتروني.
تغليف دالة wp_mail() بكود خاص بـ WPML
عند إرسال رسائل البريد الإلكتروني، تحتاج إلى إضافة ثلاث خطوات إضافية إلى كود إضافتك أو قالبك:
- بدّل سياق اللغة إلى اللغة التي يفضلها مستلم البريد الإلكتروني.
- ثم شغّل كل الكود الخاص بك لإرسال البريد الإلكتروني فعلياً.
- بدّل اللغة مرة أخرى إلى لغة الموقع.
من المحتمل أن تكون الخطوة الثانية جاهزة في هذه المرحلة. الشيء الوحيد الذي يجب القيام به هو إضافة سطرين إضافيين خاصين بـ 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 meta عادي، لذا إذا كنت ترغب لسبب ما في استردادها، يمكنك استخدام هذا المقتطف المفيد:
$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
}
ودجت اللغة
إذا كنت توفر واجهة مستخدم في الواجهة الأمامية مع لوحة تكوين للمشتركين لديك، يمكنك سؤالهم عن لغتهم باستخدام خطّاف الإجراء التالي:
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 حفظ معلومات اللغة في جدول user meta (راجع الفصل التالي).
إرسال رسائل البريد الإلكتروني إلى عناوين غير مخزنة
تحتاج أحياناً إلى إرسال رسائل بريد إلكتروني إلى عناوين غير موجودة في أي جدول من جداول قاعدة البيانات. ونظراً لأن المستلمين ليسوا في قاعدة بياناتك، فإنك لا تخزن أي تفضيلات لغوية للمستلم أيضاً.
في هذه الحالات، يتوقع 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.