当社はMovable Typeを使用してサイトを構築しているイメージが強いかもしれませんが、WordPressを使用する場合もあります。投稿画面をクライアント様が持つ情報に合わせてカスタマイズし、保存することができるようになる「カスタム投稿タイプ」はパワフルで気に入っている機能の一つです。
最近WordPressを使用して構築したサイトにおいて、カスタム投稿タイプ同士を関連付けて表示させる必要が出ました。具体的には、商品情報の個別ページで、別のカスタム投稿タイプに保存している図面表情報(多数)を呼び出してリストで表示するものです。
今回は、商品の型番と図面表の型番の先頭が一致するので、商品情報のカスタム投稿タイプに型番の先頭をカスタムフィールドに入力し、その内容を元に図面表を検索して表示することにしました。その際、正しく結果を表示するためには商品情報に入力する型番と図面表の型番、いずれも半角英数字で入力する必要がありました。しかし、パソコンに不慣れな方は英数字も全角で「Hello」のように入力されることがよくあります。これでは上手く検索されません。
フックの活用
前置きが長くなってしまいましたが、なんとか半角で入力してもらう方法がないかと考えたところ、自動で全角英数字を半角英数字に変換することを思いつきました。さらに、記事を保存したときに自分で定義した処理が実行できないかと探ったところ、WordPressにも投稿が保存される直前に処理されるフックwp_insert_post_dataがあることを見つけました。
テーマの中にあるfunctions.phpに独自の関数labArrangePostData
を定義し、mb_convert_kana()
で投稿データの文字列を全角英数字から半角英数字に変換するようにします。そして投稿データをreturn
してやると、関数で変換された結果が投稿として保存されるようになります。
function labArrangePostData($data) {
if ($data['post_type'] === 'sheets') {
$data['post_title'] = mb_convert_kana($data['post_title'], 'a');
}
return $data;
}
add_action('wp_insert_post_data', 'labArrangePostData');
カスタムフィールドの場合はwp_insert_post_data
内でupdate_post_meta
をしても、元のデータで上書きされてしまいます。別のフックwp_insert_post
で処理するようにしました。
まとめ
投稿テストをしたところ、「Hello」と入力して保存した場合でも自動で半角の「Hello」に変換されて保存されるようになりました。解説書から「半角英数字で入力してください」という文章を削除することができ、ユーザー様の負担も少し減ったのではないかと思います。少しでもユーザー様の負担が減るよう、今後も工夫を続けていきたいと考えています。
ちなみにフックを思いついたのは、Movable Typeにも同様の仕組みがあるためです。WordPressでもMovable Typeでも、投稿などが1つの「オブジェクト」として扱われる点は似ているな、とカスタマイズしながら感じました。