qTranslate-X 使用時に WordPress システムからのメールのタイトルを日本語だけにする方法

WordPress で多言語化プラグイン qTranslate-X を使っている際に、システムからのメールのタイトルが例えば
  ”[[:ja]日本語のサイトタイトル[:en]英語のサイトタイトル[:]] ユーザー名とパスワード情報”
のように複数言語表記となってしまう場合があります。

そんな場合は次のようなコードを functions.php に追加すると日本語のサイトタイトルだけにできます。

// メールのタイトルを変更(多言語化)
function my_wp_change_mail_subject( $mail )
{
    $subject = $mail['subject'];
    $ptn = "/\[:ja\](.*?)\[:en\](.*?)\[:\]/";
    $subject = preg_replace( $ptn, '$1', $subject );
    $mail['subject'] = $subject;
    return $mail;
}
add_filter( 'wp_mail', 'my_wp_change_mail_subject' );

 

WordPress からメールを送信する関数として wp_mail() があります。上記コードはこの関数でメールを送信する前に内容を変更できるフィルターの一つ、’wp_mail’ を利用しています。ここではタイトルを変更していますが、必要ならば同様にして本文なども置換することが可能です。

上のコードでは本質的な箇所のみを記述しています。そのため、WordPress からメールを送信する際には必ず上記コードが実行されてしまいます。もし必要ならば、wp-includes/pluggable.php 等のソースコードを見てみると、フックするタイミングを限定したフィルターが見つかるかもしれません。

また、PHP の function_exists() 関数で qTranslate-X  内に定義されている関数の存在チェックをすることで qTranslate-X を有効にしているときだけ上記の文字列置換をするように変更するとより良いか、と思います。

なお、WordPress は ver.4.3.1、qTranslate X は ver.3.4.6.4 で動作を確認しています。

pagetop