【WordPressのデータベースから、投稿に関するデータを取得して表示するサンプルコード】特定の条件を付けることもできる

前回の記事を書きながら、WordPressのデータベース(DB)を操作するには、

$wpdbを使ってやればいいんだ、ってことだけは理解できました。

また、DB操作をするには欠かせない予備知識として、「SQL」「クエリ」についても書きました。

 

ですので、次は実際にコードを書いてみましょう~。

今回は、割と理解しやすい「投稿」関連のデータを取得や表示する方法について、

焦点を絞って書きました。

 

 

DBの操作は「get_result」関数から始めると理解しやすい

 

私個人的にはですが・・・

Codex「関数リファレンス/wpdb Class」に書いてある順番通りに勉強する必要はないと思っています。

とっつきやすいところからスタートすればいいんですという考えです。

そういう意味では「get_result」関数が最もとっつきやすいです。

ここは、一気に飛ばして「get_result」関数について解説されている個所を確認しましょう。

 

get_results を使うと、データベースから一般的な複数行の結果を取ってくることができます。

この関数はクエリの結果全体を配列として返します。この配列の各要素はクエリ結果の各行と対応しており、

get_row と同じくオブジェクト、連想配列、またはインデックス配列のいずれかを指定することができます。

 

と、いろいろ書いてありますが、この時点では内容まで理解する必要はないと思います。

(実際にコードを書いて眺めて考えながらじゃないと理解しづらいという意味で)今は一読程度でOK。

 

まずは何よりコードを書きます。

 

 

投稿タイトルを取得(サンプルコード)

 

早速ですが、「get_results」関数を使って、

投稿データが入っているテーブル名「posts」から投稿タイトルを取得します。

 

【投稿タイトルを取得】

<?php
$data = $wpdb->get_results( "SELECT post_title FROM $wpdb->posts" );
foreach ($data as $value) {
 echo $value->post_title . "<br />";
}
?>

やっていることは、

  • SQLクエリ → テーブル名「posts」から、投稿タイトル「post_title」フィールドの値を取得
  • 「get_results」関数を使って、SQLクエリで取得した値を変数「$data」に格納
  • 「foreach文」で、取得したタイトル「$value->post_title」をすべて出力

って感じです。

 

テーブル名について

ところで、テーブル名「posts」について気になった方もいらっしゃると思います。

あえて「posts」としている理由は、このコードを使い回しできるようにするためですね。

つまり、WordPressをインストールしたときに付けた「wp_」といった「接頭辞」を

明示的に入れてテーブル名「wp_posts」と指定することもできますし、

今回のように、接頭辞なしの「posts」のみで指定することもできるようです。

 

接頭辞なしの「posts」を使うことで、接頭辞が変わってもコードを変更する必要がなくなるので、

便利と言えば便利ですね。

 

というわけで、話を戻して結果を見ます。

 

【結果】

下のように出力されます。

 

と、ここで。

 

上の結果では同じタイトルがたくさんですね。

投稿って公開/下書き/予約投稿などなど、いろいろステータスあります。

詳細は、「データベース構造 – WordPress Codex 日本語版」一覧化されているのを引用しますと・・・

【投稿ステータス】

'publish': 公開済み
'pending': ペンディング
'draft': 草稿
'private': プライベート(非公開)
'static':(2.0.x 以前はページ
'object':
'attachment':
'inherit': 継承(添付ファイル、改訂履歴・自動保存のとき)
'future': 予約投稿

 

ですので、今度は投稿ステータスが公開済みになっているタイトルを取得します。

【投稿ステータスが公開済みの投稿タイトルのみ出力】

<?php
$data = $wpdb->get_results( "
 SELECT post_title
 FROM $wpdb->posts
 WHERE post_status = 'publish' /*公開済みステータス*/
" );
foreach ($data as $value) {
 echo $value->post_title . "<br />";
}
?>

 

「WHERE」で条件を加えます。

「post_status」が「公開済み(publish)」となっている投稿を取得って条件です。

 

【結果】

 

というわけで、WHEREを使えば、他にも様々な条件に合ったデータを取得できます。

データベース構造 – WordPress Codex 日本語版」を参考にして、

いろんな条件を入れて試してみると、どんどん理解できます。

 

 

アイデア次第で面白いコンテンツも作れますね

 

ところでこれ、結構アイデア次第でおもしろいですよね。例えば、

「近日公開予定の記事は、これだ!」

って感じで、予約投稿のタイトル一覧をサイトのどこかに表示させておくとか。

 

【近日公開予定記事を取得】

<?php
$data = $wpdb->get_results( "
 SELECT post_title
 FROM $wpdb->posts
 WHERE post_status = 'future' /*予約投稿ステータス*/
" );
foreach ($data as $value) {
 echo $value->post_title . "<br />";
}
?>

 

DBを操作できるようになれば、よりアイデアを形にできる可能性が高くなりますね。

アイデアなんて誰でもいいこと思いつきますし、それだけで止まっちゃうことも多い。

重要なのは、そのアイデアを実現できる能力があるかどうか、ですしね。

 

これでまた、WordPressでやれることの幅が広がる!

 

 

まとめ

 

まず最初の最初で$wpdbをコードレベルで勉強するには、

「get_results」関数から始めると挫折も少なくて済むと私は思います。

 

今回は投稿データに焦点を絞りましたけども、

コメントやリンクなどのデータも、該当するテーブルや条件に合わせて指定してあげればOKです。

その際、「どんなテーブルがあって、どういう条件でDBを操作すればいいか」といった疑問は、

データベース構造 – WordPress Codex 日本語版」で一覧化されていますので、

是非とも参考にされると、とても理解が深まると思います。

 

 

とても参考にさせて頂いたサイト

 

実は私がDBのことについて知りたくなって、はじめに参考にさせて頂いたのがこちらの記事です。

WordPressからデータベースに直接アクセスする | webOpixel

 

この記事に出会えて本当に感謝しています。

 

たぶん、webOpixelさんの記事は、日本中探してもダントツでわかりやすい記事だと思います。

私が書いた記事よりもさらに簡潔でこまかく、わかりやすく書かれていますので、併せて参考にされると

もうかなりスッキリ理解できると思います。おすすめです!!

著者:bouya Imamura