WP Mail SMTP を使って Mailgun (SendGrid) からメールを送ると文字化けする

文字化けした経緯

WordPress から送信されるメールを Mailgun で送信するために、WP Mail SMTP というプラグインを使ってみました。
ドキュメントのとおりに設定を進めると、WordPress からのメールが Mailgun 経由で送信されるようになりました。
届いたメールを確認してみると…なぜか本文が文字化けしていました。
メールヘッダを見ると、Content-Type: text/html; charset="ascii" となっています。
※ちなみに、Gmail でメールを受信した場合は、文字コードの指定が間違っていても勝手に修正して表示されるようです。

原因はプラグインのバグ

プラグインのソースコードを見ても charset を指定しているところがなかったので、調べるのにかなり時間がかかってしまいましたが、原因はプラグインのバグのようで、GitHub に Issues があがっていました。
SendGrid でも同じ現象が起こるようです。
また、やり取りを見る限り、バグの修正版は4月上旬にリリースされるようです。

本家のプラグインなら文字化けしない

もっと調べてみると、Mailgun がオリジナルのプラグインを公開していて、こちらでは文字化けは起こりませんでした。

Mailgun for WordPress

SendGrid のプラグインもあります。

SendGrid

修正版が公開されるまで待っていられない方は使ってみてはいかがでしょうか。

WordBench Nagano Special 2018 !!! に実行委員として参加しました

2月3日に松本市のコワーキングスペース「SWEET WORK」で開催した WordBench Nagano Special 2018 !!! に実行委員として参加しました。
去年のSpecialもそうでしたが、今年もスピーカーには豪華なメンバーが勢ぞろいしていました。豪華すぎて一回のイベントにまとめてしまうのがもったいないと思ったくらいです。

イベントの反省

私はイベントの準備ではほとんど何もできなかったんですが、当日は司会をやらせていただきました。
司会では、時間の管理がうまくいかず、進行が予定より大幅に遅れてしまいました。元々かなりタイトなタイムテーブルだったので、質疑応答の時間等でもっとしっかり時間調整するべきだったと思います。しかし、50人という規模のイベントで司会を任せてもらうことなんてめったにないですし、大勢の方に顔を覚えてもらえたのでとても良かったです。

セッションの感想

セッションの後にLTをやることになっていたせいか、セッションの内容よりも、スピーカーの方々のプレゼン力の高さが印象に残りました。
エヴァ風のスライドを使ってたり、デモを挟みながら説明したり、皆さんそれぞれのスタイルがあってとても面白かったです。
特に、ハムさんのセッションは最高で、ぬるぬるのアニメーションを使ったスライドは、見ていて思わず踊り出したくなるほどでした。めちゃくちゃ格好良かったです。
そして、このセッションを見て私が目指すプレゼンのスタイルも見えてきました。
それは、スライドの映像と自分の身体の動きをリンクさせてPerfumeのライブのように表現するスタイルです。
これが完成すれば、誰にも真似できない最高のセッションになると思います。

懇親会

懇親会もたくさんの方に参加していただき、大いに盛り上がりました。
sweetの美味しいパンはもちろん、大阪の人が会場で作ったたこ焼きや、いろんな人が持ち込んだお酒もありました。
いろんな方に声をかけていただき、お話できて良かったです。
そして、懇親会ではLT大会もやりました。
私もLTで四次元の話をさせていただきました。
普段のWordBenchでは3回くらい登壇していて、ちょっとは慣れてきたので平気だろうと思って挑んだんですが、ガチガチに緊張してしまって全然だめでした。
取って置きのネタだったのですごく悔しいです。

感じたこと

このイベントでは参加している人の熱気が半端じゃなかったです。
私は終始失敗を恐れて消極的になっていましたが、白熱している皆さんからエネルギーをもらえました。
ありがとうございました。
そして、至らない私をフォローしつつイベントをまとめてくださったとろゆにさん、至らない私ととろゆにさんをフォローしつつWordBench長野を盛り上げてくださった全国のWordBenchコミュニティの方とWordBench長野コミュニティの方、本当にありがとうございました。

Google Cloud Platform (GCP) で WordPress を運用する様々な方法 2

以前書いた記事「Google Cloud Platform (GCP) で WordPress を運用する様々な方法」から新たな進展がありました。

WordPress on App Engine Starter Project はもう古い

「GAE スタンダード環境で運用する方法」で紹介したインストール手順ですが、2017/11/11 に GitHub の readme が更新されました。

This project is no longer actively developed or maintained.

For new work on this check out A helper command for running WordPress on Google Cloud Platform

このプロジェクトはもはやメンテナンスされていないため、別の方法でインストールするように案内されています。
別の方法としてリンクされているリポジトリは、「GAE フレキシブル環境で運用する方法」で紹介したインストール手順でも使用されています。
つまり、現在は GAE のスタンダード環境もフレキシブル環境も、このヘルパースクリプトを使った運用方法を推奨しているようです。
ネットで紹介されているインストール手順は古いやり方ばかりなので要注意です。

GCE で運用する方法2

前回の記事で、ランチャーを使用したインストール手順を紹介しましたが、ランチャーを使わずにインストールする方法もありました。

CONTAINER ENGINE に WORDPRESS をデプロイする方法

また、推定費用も $4.28~/月 と紹介しましたが、GCE には無料で使えるマシンタイプもあるようです。(以前はGCEに無料枠はなかった気がします)
実は、これらの情報は GCP の公式ドキュメントにまとめられていました。
正確な情報はそちらをご確認いただければ良いと思います。

WordFes Nagoya 2017 に参加してきました

10月28日に名古屋工業大学で開催された WordFes Nagoya 2017 に参加してきました。
WordCamp Kyoto, Tokyo はスタッフとして参加しましたが、今回は一般でのんびりと参加させてもらいました。

のんびりしすぎて遅刻

一応、開会式から参加しようと思っていたのですが、のんびりしていたら盛大に遅刻してしまいました。

がらがらの受付を済ませて中に入ると、WordFes のチョコレートがおいてありました。
「これはインスタ映えする!」と思わず写真を撮りましたが、下手すぎて全然ダメでした(笑)フラッシュくらいつければよかった…

これからの WordPress × SSL on レンタルサーバ

ちょうど2つ目のセッションが始まるところだったので、ぱっと目についた SSL のセッションに参加しました。
常時 SSL についてのお話だったのですが、私はこれまで全く気にしていなかったので、「ちゃんと勉強しないといけないな」と反省しました。
常時 SSL 化の手順やレンタルサーバの選び方も解説されていて、とても実践的な内容でした。

昼食休憩

お昼休みには、何人かの知り合いにお会いしました。
ハムさんにもお会いし、なぜか白いブラックサンダーをいただきました!
参加者にはパンとおにぎりと飲み物が無料で配布されました。
近くに座った方にも話しかけていただき、楽しく昼食を摂ることができました。

これからのWebディレクターのあるべき姿2017

Web ディレクターとはどんな仕事なのか気になったので参加してみました。
プロデューサーはプロジェクトを成功させる人、ディレクターはプロジェクトを責任持って終わらせる人というお話が印象的でした。
プロジェクトを完結させるために、多くの苦労や工夫があるんだと思いました。

AI×WordPress 〜45分で学ぶAIブロガーの設計と構築〜

最近は AI がとても身近になって来ましたが、WordPress と連携して運用するという話は聞いたことがなかったので、思わず参加してしまいました。
内容としては、実際に運用しているという話ではなく、AI が今後 WordPress でできるようになることとそれを実現する方法、それに対する心構え等の話がメインでした。
とてもイメージしやすく、わかりやすいお話でした。

「人生は一度きり!」悔いのない人生を送るための、これからの働き方座談会

このセッションでは、フリーランスの方や企業に勤めている方が、様々な働き方について座談会形式でお話しされていました。
古民家で民宿をしながらWebデザインで生計を立てていたり、優良企業に勤めていてもいつリストラされるかわからなかったり、面白い話が盛りだくさんでした。

LT大会

最後にお待ちかねの LT 大会がありました。
個人的には GOUTEN さんの LT が良かったです。
Google のサービスについて色々知れたのと、スライドに出てきた写真の女の子が可愛かった!

懇親会

その後、会場を移動して懇親会が行われました。
今回は、すごく多くの方とお話できて、持って行った名刺も全て交換してしまいました。
暖かい雰囲気で話しやすかったです。
料理も豪華で美味しくいただきました。

感想

結果、このイベントに参加して本当に満足できました。
WordCamp Kyoto, Tokyo に比べて規模は小さいですが、その分リラックスして参加できたような気がします。
是非、また来年も参加したいです!

WordPress プラグインを GlotPress で国際化する必要最低限の手順

英語で作成した WordPress プラグインを国際化したので、その手順を書き残します。
この手順は、GlotPress を使った翻訳のみ想定しています。
また、あらかじめ公式ディレクトリにプラグインを掲載している前提です。

プラグインのスラッグを調べる

まずはプラグインの URL からスラッグを調べます。
URL が https://wordpress.org/plugins/analytics-tracking の場合、スラッグは analytics-tracking となります。
プラグインのスラッグは、テキストドメインとして使用します。
テキストドメインとは、WordPress が読み込む翻訳を区別できるようにするための一意識別子です。
GlotPress での翻訳を反映するには、プラグインのスラッグとテキストドメインを一致させる必要があります。

プラグインヘッダにテキストドメインを追加する

プラグインヘッダにテキストドメインを追加すると、管理画面でプラグインを表示するときに WordPress がプラグインメタデータを国際化します。

プラグインヘッダ

/*
 Plugin Name: Analytics Tracking
 Plugin URI: https://github.com/hirofumi2012/analyticstracking
 Description: Add the tracking code snippet to each web page.
 Version: 2.6
 Author: hirofumi2012
 Author URI: https://four-dimensional-friend.appspot.com/
 License: GPLv2 or later
 Text Domain: analytics-tracking
 */

管理画面

load_plugin_textdomainの追加

プラグインに翻訳ファイルを読み込む処理を追加します。

function myplugin_load_textdomain() {
 load_plugin_textdomain( 'analytics-tracking' );
 }
 add_action( 'plugins_loaded', 'myplugin_load_textdomain' );

なお、プラグインに言語ファイルを同梱しない場合load_plugin_textdomain の第二引数以降は全て省略可能です。

引用元

Late 2015 版、WordPress プラグインの翻訳の仕方

翻訳する文字列のマーク

プラグインで翻訳する文字列とテキストドメインを __() 関数でくくります。

$hello = __('Hello', 'analytics-tracking');

文字列を echo で出力する場合は、_e() 関数を使います。

_e('Hello', 'analytics-tracking');

参考ドキュメント

I18n for WordPress Developers – WordPress Codex 日本語版

まとめ

以上の手順で、プラグインを GlotPress で翻訳できるようになりました。
GlotPress で翻訳を登録して承認されると、プラグインに反映されます。

参考ドキュメント

翻訳の始め方