スキルアップを始める!

【WordPress】取得したいデータをデータベースから取り出す$wpdb[続編]

WordPress(ワードプレス)
この記事は約6分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

ワードプレスのデータベース内から$wpdbを使って欲しいデータを取得する方法、続編です。

前回のおさらい(get_results)

wp_postsとget_resultsを使って、テーブルからデータを取り出して表示させました。

global $wpdb;
$result = $wpdb->get_results( "SELECT * FROM wp_posts");
print_r($result);

グローバルオブジェクト変数 $wpdbを使って、WordPressデータベースとやりとりすることができます。get_resultsを使ってSQL文の全体を配列として返します。

取得したいデータを絞り込む

ここから、取得したいデータを色々と絞り込んでみます。そのまえに、queryを扱いやすいように、変数にして分けてみます。

global $wpdb;
$query = 'SELECT * FROM wp_posts';
$result = $wpdb->get_results($query);
print_r($result);

出力結果は、同じになりました。

特定の投稿者だけのデータを取得する

wp_postsテーブルを見ると、post_authorという列がありました。ユーザーIDと同じようでしたので、こちらを使って絞り込んでみます。

[rml_read_more]

データベースを見ると、post_author=5の場合、記事がひとつだけになっているようでしたので、同じ結果になるか試してみます。

global $wpdb;
$query = 'SELECT * FROM wp_posts WHERE post_author = 5';
$result = $wpdb->get_results($query);
print_r($result);

1記事だけが、抽出されました!

さらにデータを絞り込む

このままだと、記事だけでなくレコードが全部抽出されてしまうので、記事(post_content)の部分だけを抽出してみます。

SELECT post_contentとして、post_contentのカラムのデータのみ抽出してみます。

global $wpdb;
$query = 'SELECT post_content FROM wp_posts WHERE post_author = 5';
$result = $wpdb->get_results($query);
print_r($result);

抽出されました!

タイトルを取得する

つまり、タイトルを取得したい場合は、post_titleを使えばいい…ということになりそうです。

global $wpdb;
$query = 'SELECT post_title FROM wp_posts WHERE post_author = 5';

$result = $wpdb->get_results($query);
print_r($result);

取得できました!

中の文字のみ取得する

このままだと、画面に配列が取得されますので、中の文字列を出力してみます。foreach文で中のデータを全て取得して、echoで順番に出力していきます。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 5';
$result = $wpdb->get_results($query,OBJECT);
foreach ($result as $value) {
	echo $value->post_title . "<br />";
   }

取得できました!

post_authorを変えてみます。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2';
$result = $wpdb->get_results($query,OBJECT);
foreach ($result as $value) {
	echo $value->post_title . "<br />";
   }

結果が変わりました!wp_postsにはメディアなどのレコードも入っているので、画像のファイル名などが色々と出てきているようです。

もし、投稿だけにしたい場合はpost_typeあたりで絞り込んであげれば、いけそうな気がします。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,OBJECT);
foreach ($result as $value) {
	echo $value->post_title . "<br />";
   }

出てきました!投稿のみが表示されています。

最初のひとつ目であれば、$result[0]->post_titleのようにして取得できそうです。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,OBJECT);
echo $result[0]->post_title;

取得できました!

まとめ

他にも下記のような、クエリの指定方法が色々とあります。

SELECT * FROM wp_posts
SELECT * FROM wp_posts WHERE post_status IN ("future","draft")
SELECT * FROM wp_posts WHERE post_status = "publish" OR post_status = "future"
SELECT * FROM wp_posts LIMIT 10
SELECT * FROM wp_posts WHERE NOT post_status = "publish"
SELECT * FROM wp_posts WHERE post_content LIKE "%WordPress%"
SELECT post_title, post_date, post_status FROM wp_posts
SELECT * FROM wp_posts WHERE post_status IN ("future","draft")

色々と書き方を覚えると、役に立ちそうです!また次回以降でも、詳しく書いていきたいと思います!ご参考ください😃

関数リファレンス/wpdb Class

URLをコピーしました!