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

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

wp_postsとwp_postmeta

WordPressのデータベーステーブルの中でも最も頻繁に使用されるwp_postsとwp_postmeta。
これらのテーブルの詳細な構造と、wpdbクラスのインスタンスを通した利用方法をご紹介します。

wp_postsテーブル

wp_postsテーブルは、管理画面より作成した様々なページ(投稿ページ、固定ページ、カスタム投稿ページなど)の主要なデータを格納したテーブルです。
まずはwp_postsテーブルについて、代表的なカラムを紹介します。

ID

整数型のカラムで、auto_incrementが設定されています。
wp_postsテーブルでは、公開済みの記事はもちろん過去に編集した記事のリビジョンまで全て保存されるので注意が必要です。
一度公開された記事のIDが変更となることはありませんが、その記事の編集前のバージョンなどは別のIDで、potsテーブルへと格納されています。
wp_postmetaのpost_idと対応していて、投稿に関わる追加の設定をwp_postmetaテーブルから読み込む際のキーとなります。

post_author

記事投稿者のユーザーIDが格納されています。これをつかって検索をかけることで、特定ユーザーの投稿した記事一覧などを取得する事が出来ます。

post_contentとpost_title

投稿ページのタイトルと本文が格納されています。the_title()、the_content()といった頻出するテンプレートタグは、pageオブジェクトを通じてこれらの値を取得しています。

post_excerpt

wp_excerpt()という関数はトップページやアーカイブページでよく利用される関数で、記事の冒頭を出力します。
wp_excerpt()はwpdbクラスを通じて、このpots_excerptカラムに格納されている記事の抜粋文を取得します。

post_status

記事のステータスを格納しています。公開済みであれば’publish’、下書きであれば’draft’、レビュー待ちであれば’pending’となります。
複数のライターが存在しているときに、○○とうライターのレビュー待ちの記事を管理画面で一覧表示したい、といった場合にはpost_authorとpost_statusで検索をかけることで実現出来ます。

post_type

ページのタイプを格納しています。投稿ページであれば’post’、固定ページであれば’page’、カスタム投稿ページなどを利用されている場合はその名称がここに保存されます。

投稿データの取得

テーマファイルでよく使われるthe_content()の中身は下記のようになっています。

function the_content( $more_link_text = null, $strip_teaser = false) {
$content = get_the_content( $more_link_text, $strip_teaser );
	$content = apply_filters( 'the_content', $content );
	$content = str_replace( ']]>', ']]>', $content );
	echo $content;
}

the_contentが呼び出しているget_the_content関数の中では、グローバル変数$pageを宣言して投稿内容を取得、nextpageタグが存在した場合の処理などを行った上で投稿内容を返します。
the_contentではその返り値に対して’the_content’フィルターを適用しています。
デフォルトでは投稿内容の改行にあわせて

タグが設定されますが、この処理は’the_content’フィルターへのコールバック関数として設定されています。
したがって、この

タグの自動追加がわずらわしく、自分で実装をしたい場合には新しい関数を定義してその中でget_the_contentを呼ぶ事で’the_content’フィルターを適用する前の投稿内容を取得し、独自に処理を行う事で実現出来ます。

まとめ

WordPressの各テーブルの中でも最も利用頻度の高い、wp_postsテーブルについて解説しました。
データベース構造を把握するとWordPressのカスタマイズが格段に理解しやすくなるので、是非他の記事にも目を通してまずはデータベース構造の理解に努めてみてください。

関連記事

ページ上部へ戻る