コラム(WEB制作のポイント)

WordPress 2016年6月13日

WordPressのフックを利用し、記事保存時に処理を追加

WordPressのフックを利用し、記事保存時に処理を追加

WordPressでCMSを構築する際、投稿(記事)の保存のタイミングで何らかの処理を実行させたいときがある。
そういったときのためにWordPressには「フック」とよばれる機能が備わっている。
「フック」とは、日常用語からも想像できるように「引っ掛ける」という意味で、WordPressの処理のタイミングにオリジナルの処理を引っ掛けておき、同時に実行してもらう仕組みのことをいう。

WordPressが備えているフックは、投稿(記事)の保存のタイミングだけでなく、管理画面にログインした際、ログアウトした際など、多くのタイミングで「フック」が準備されている。

プラグイン API/アクションフック一覧

今回は、そのなかでも「投稿(記事)の保存のタイミング」にオリジナルの処理を「フックする」ことにフォーカスする。

1. 当社の事例

当社の事例

いきなり技術的な説明に入っても、WordPressのカスタマイズ作業に携わる人以外はピンとこないはずなので、過去に当社が実装した事例を先に紹介しておこう。

1-1. 投稿保存と同時にアップロードしたExcelの内容をインポートする

せっかくCMSを導入しても、情報入力に手間がかかるようであれば、日々の運用の効率化には寄与しない。とくに一覧表で表現されるような情報をブラウザ上で入力するのは、骨の折れる作業の代表である。
そこで当社がよく採用する手法が、Excelの定形フォーマットに事前に情報を記載してもらい、その情報を投稿(記事)の保存のタイミングでインポートする方法である。

以下は、この手法で情報を登録した例だ。

  • メーカーコーポレートサイトの製品スペックの登録
  • 不動産物件検索サイトの物件詳細の登録

ここでは、「製品スペックの登録」についてもう少し詳しく紹介しておこう。

1-2. 製品スペックの登録

当社のクライアントにはメーカー企業が多い。そのため、WEBサイト制作において必然的に製品検索機能を実装することになる。常に課題となるのは、一つ一つの製品スペックをどのようにCMSで登録させるか。扱う製品によっては、スペック項目が20~30項目にもおよび、そのうえ、製品のカテゴリーごとにスペック項目が異なるのが常である。
もちろん管理画面には、それらを加味してカスタムフィールドを駆使したカスタマイズを施すが、これだけの項目数を全製品について管理画面上から入力するには相当な労力が予想されるため、以下のように実装している。

  • スペックの項目と内容をExcel上に記載してもらう
  • CMSの管理画面上でそのExcelをアップしてもらう
  • 製品情報を保存するタイミングでその内容をカスタムフィールドにインポートする
  • サイトの表示には、カスタムフィールドにインポートされた情報をもとにレンダリングする

この機能の実装によって、とくに初期データ入力が格段に楽になった。もちろん、インポートされたスペックの内容は、管理画面上で再編集することも可能だ。

インポートするスペックExcelシートのイメージ

(インポートするスペックExcelシートのイメージ)

WEBサイト上に表示された状態

(WEBサイト上に表示された状態) ※値が未入力の項目は非表示としている。

2. 実装方法

実装方法

「投稿(記事)の保存のタイミング」には、もう少し細かなタイミングでいくつかのフックが準備されている。例えば、更新時に呼び出されるフック(pre_post_update、edit_post、post_updated)や、新規保存時に呼び出されるフック(wp_insert_post)、全ての保存時に必ず呼び出されるフック(save_post)などが存在する。

いずれのフックも実装する要領は同じである。フックはテーマフォルダーのなかにある「functions.php」に記載すればいい。以下に、何かしら記事が保存されれば、ある特定のメールアドレスにメールを送信する例を紹介しておく。

add_action( 'save_post', 'savepost_mailsend' );
function savepost_mailsend($post_ID){

    mail('dummy@dummydomain', '記事が更新されました', 'WordPressで記事の内容が更新されました。');

}

「add_action」関数が、WordPressの処理にアクションを追加(フック)する関数である。第一引数にある「save_post」が独自の処理を実行するタイミングで、さらに第二引数にある「savepost_mailsend」が独自処理が記載されている関数名。第一引数は、WordPressで決められているフックの名前(文字列)を記述し、第二引数の関数名は自由に決定すればよい。
上記の例を簡単に説明すると「記事が保存される save_post のタイミングに独自処理 savepost_mailsend をフックするので呼び出してね」とWordPressにお願いしているということだ。

「function」以降に続く記述が独自処理の内容になる。ここでは、単純にメールを発信しているだけだが、要件によってはもっと複雑な処理を記述することになる。引数には「$post_ID」が渡されるので、更新のあった記事の内容を呼び出してその内容に沿った処理を記述することも可能だ。

3. WordPressは、フックの活用で機能拡張も自由自在

WordPressは、フックの活用で機能拡張も自由自在

WordPressには、WEBサイトの開発者が欲しい関数やフック、フィルターとよばれる機能がふんだんに準備されていて、機能拡張が比較的しやすい。もちろん、WEBサイトの開発者の希望をもれなくカバーしてくれているわけではないが、バージョンアップを重ねるたびにその充実が図られている。

WEBサイトのすべてのシステム要件がWordPress上で実現可能とはいわない。当社でもスクラッチでデータベースの設計から手がけるシステムも存在する。しかし筆者は、WordPressに準備されている関数やフック、フィルターを利用することで十分にWEBサイトのCMSとしてクライアントの要望に応えられる可能性が高いと感じている。
読者のなかには、クライアントの要求仕様を見ただけで、WordPressの採用をあきらめた経験を持つ方もいると思うが、今いちどその要件をWordPressのフックと照らし合わせて考え直してみてはどうだろう。いいアイデアが浮かぶ可能性があるはずだ。

シェアする
  • line

別のコラムにもヒントがあるかも・・・

このコラムに興味があったなら、
こんなコラムも

執筆:福永 忠夫

フレイバーズに、ご相談されませんか?