사이트 사용자에게 선호하는 언어로 이메일을 보내는 것은 중요합니다. 이를 위해 WPML은 사용자가 사이트를 이용하는 동안 선호하는 언어를 저장하고, 이메일을 보낼 때 이 기본 설정을 적용할 수 있는 API를 제공합니다.
이 문서는 플러그인 및 테마 개발자가 선호하는 언어 컨텍스트에서 표준 WordPress wp_mail() 함수와 제품을 통합하는 방법을 설명합니다.
사용자별로 현지화된 이메일을 보내야 하는 경우는 언제인가요?
다음은 사용자가 선호하는 언어로 이메일을 보내야 하는 일반적인 경우를 보여주는 예입니다.
- 구독자에게 뉴스레터를 보내는 사이트 관리자인 경우: 사이트 관리자가 프랑스인이고 뉴스레터 인터페이스를 프랑스어로 표시합니다. 결과: 모든 이메일이 프랑스어로 전송됩니다. 구독자는 전 세계에서 오기 때문에 많은 사람이 이 이메일을 이해하지 못할 것입니다.
- 소셜 네트워킹 사이트를 운영하는 경우: 이 사이트의 회원은 사진을 게시할 수 있습니다. 다른 회원은 해당 사진에 좋아요를 누르고 별점을 줄 수 있으며, 좋아요를 누르면 이미지 작성자에게 이메일로 알림이 전송됩니다. 이제 다음 시나리오를 생각해 보세요.
- 독일인인 Mathias가 사진을 게시했습니다.
- 프랑스인인 그의 친구 Pierre가 Mathias의 사진을 보고 좋아요 버튼을 클릭합니다.
- 이 작업을 수행하는 동안 Pierre는 페이지를 프랑스어로 표시하고 있었기 때문에 Mathias는 프랑스어로 이메일 알림을 받게 됩니다.
- 전자상거래 사이트를 운영하는 경우: 일부 제품을 일시적으로 사용할 수 없는 경우 사용자는 제품이 다시 입고될 때 알림을 받을 이메일을 남길 수 있습니다. 일본인 방문자가 일부 제품 아래에 이메일을 남깁니다. 그런 다음 스페인인인 사이트 관리자가 재고 여부를 업데이트합니다. 결과: 일본인 고객은 일본어가 아닌 스페인어로 “제품 x를 다시 사용할 수 있습니다”라는 자동 이메일을 받게 됩니다.
이와 유사한 예는 훨씬 더 많으며, 이것이 플러그인이나 테마에 문제를 일으킬지 여부를 가장 잘 아는 사람은 바로 여러분입니다.
이러한 모든 경우에 수신자가 선호하는 언어를 저장한 다음 이메일을 보내는 동안 잠시 해당 언어로 전환해야 합니다.
WPML 전용 코드로 wp_mail() 함수 래핑하기
이메일을 보낼 때 플러그인이나 테마 코드에 세 가지 추가 단계를 추가해야 합니다.
- 언어 컨텍스트를 이메일 수신자가 선호하는 언어로 전환합니다.
- 그런 다음 실제로 이메일을 보내는 모든 코드를 실행합니다.
- 언어를 다시 사이트 언어로 전환합니다.
이 시점에서 두 번째 단계는 아마 준비되었을 것입니다. 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
}
언어 위젯
구독자를 위한 구성 패널이 있는 프런트엔드 사용자 인터페이스를 제공하는 경우 다음 액션 훅을 사용하여 언어를 물어볼 수 있습니다.
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->문자열 번역 페이지에서 번역할 수 있습니다.
실제 예제
이 페이지에 제공된 정보의 더 실제적인 예제를 보려면 Sensei 플러그인과 WPML 메일 API 통합 사용에 대한 블로그 포스트를 방문하세요.