WordPressのカスタマイズやテーマファイル、プラグインの作り方などデータベース構造から詳しく解説します。

WordPressとデータベース《postmetaテーブル》

wp_postmetaテーブル

postmetaテーブルには、ページにひもづく追加のデータを格納します。
よくつかわれる「カスタムフィールド」に入力されたデータも、設定した記事のIDとキー、バリューをpostmetaテーブルへと格納する事で入力したデータと対象ページとの関連付けを実現しています。
meta_id,post_id,meta_key,meta_valueの4カラムで構成されるシンプルなテーブルで、一つの投稿ページに対して複数のmetaデータを保存することができる構造になっています。

post_id

各投稿データとpostmetaデータに格納するmetaデータをヒモづけるために、postmetaテーブルにはpost_idが格納されています。

meta_key,meta_value

投稿ページに関わる追加の設定項目を、キーとバリュー形式で格納しています。呼び出す際には、
「特定の投稿ページ(post_id)にヒモづく○○(meta_key)という情報を出力する」
「投稿ページの中で○○(meta_key)が△△(meta_value)であるページを出力する」
などの絞り込みを行うことができます。
投稿ページでカスタムフィールド機能を使われている場合は、フィールド名が’meta_key’、入力した内容が’meta_value’として利用されます。

新たにテーブルを作成するか、カスタムフィールドを使うか

これまでの経験からすると、ひとまず投稿ページにヒモづくデータは全てpostmetaに格納するのが良いのではないかと思います。
get_post_meta()など便利な関数が用意されているほか、例えば管理画面の投稿一覧ページではデフォルトでpostsテーブルとpostmetaテーブルを連結した上でループがまわされているので、
meta_valueの値でソートするといった実装もカスタムフィールドを利用しておけば比較的容易に実装が可能です。

有名プラグイン「WordPressPopularPosts」のview数でソート

各投稿ページのview数を取得し、view数の出力やアクセスランキングを生成してくれるこちらのプラグインは手軽に利用出来るため非常に人気があります。
管理画面の投稿一覧画面でも、view数が閲覧出来てソートができたら運営に役に立つなぁと思って実装したのですがハマりポイントがあったのでご紹介します。

WordPressPopularPostは独自テーブルを生成

こちらのプラグインはWordPressのデフォルトのテーブルとは別に、popularpostdata、popularpostsummaryという2つのテーブルを独自に生成します。
viewデータはこちらのテーブルに格納されているため、manage_posts_columnsあたりをフックしたコールバック関数の中でwedbクラスを通じてpopularpostdataテーブルからデータを取得すればview数の表示自体は実装できます。

独自テーブルではソートが煩雑

ソート可能なカラムを管理画面の投稿一覧ページに追加する方法として、manage_posts_sortable_columnsをフックするという方法が一般的です。
投稿一覧ページのソートではデフォルトで用意されているテーブルの中でpostテーブルと関連するテーブルを連結し、クエリのorder by句を追加する事で実現されています。
もしviewでソートを実現したい場合、プラグインが独自に生成したpopularpostdataはデフォルトで連結されないため、ソートを行うことができません。

定期処理でpostmetaへ挿入

私がとった解決策は、popularpostdataからview数を取得し、対応するpost_idのmeta_key=’view’、meta_value=’view数’としてpostmetaテーブルへと挿入するという方法です。
これは頻繁に行うとDBへの負荷が大きいため、デイリーで更新するように実装しています。
この方法であれば問題なくソートを実現する事が出来ました。定期処理の実装についてはまた別の記事でご紹介します。

おわりに

カスタムフィールド機能を利用されたことのない方はこの機会に是非使い方をマスターしてみてください。
WordPressで作成するメディアの可能性がぐんと広がります。
これまでカスタムフィールドを活用されていた方はその仕組みを理解して、より深いカスタマイズへも対応できるようになるといいですね。

関連記事

ページ上部へ戻る