ワードプレスのデータベース内から$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文の全体を配列として返します。
![](https://eguweb.jp/wp-content/uploads/スクリーンショット-2022-01-27-12.37.21-1024x486.jpg)
取得したいデータを絞り込む
ここから、取得したいデータを色々と絞り込んでみます。そのまえに、queryを扱いやすいように、変数にして分けてみます。
global $wpdb;
$query = 'SELECT * FROM wp_posts';
$result = $wpdb->get_results($query);
print_r($result);
出力結果は、同じになりました。
![](https://eguweb.jp/wp-content/uploads/スクリーンショット-2022-01-27-12.41.16-1024x617.jpg)
特定の投稿者だけのデータを取得する
wp_postsテーブルを見ると、post_authorという列がありました。ユーザーIDと同じようでしたので、こちらを使って絞り込んでみます。
[rml_read_more]
![](https://eguweb.jp/wp-content/uploads/スクリーンショット-2022-01-27-12.41.51-1024x548.jpg)
データベースを見ると、post_author=5の場合、記事がひとつだけになっているようでしたので、同じ結果になるか試してみます。
![](https://eguweb.jp/wp-content/uploads/202201272059-00-1024x404.jpg)
global $wpdb;
$query = 'SELECT * FROM wp_posts WHERE post_author = 5';
$result = $wpdb->get_results($query);
print_r($result);
1記事だけが、抽出されました!
![](https://eguweb.jp/wp-content/uploads/202201272123-00-1024x431.jpg)
さらにデータを絞り込む
このままだと、記事だけでなくレコードが全部抽出されてしまうので、記事(post_content)の部分だけを抽出してみます。
![](https://eguweb.jp/wp-content/uploads/202201272123-00-1024x431.jpg)
![](https://eguweb.jp/wp-content/uploads/202201272303-00-1024x270.jpg)
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);
抽出されました!
![](https://eguweb.jp/wp-content/uploads/202201272327-00-1024x245.jpg)
タイトルを取得する
つまり、タイトルを取得したい場合は、post_titleを使えばいい…ということになりそうです。
global $wpdb;
$query = 'SELECT post_title FROM wp_posts WHERE post_author = 5';
$result = $wpdb->get_results($query);
print_r($result);
取得できました!
![](https://eguweb.jp/wp-content/uploads/202201272335-00.jpg)
中の文字のみ取得する
このままだと、画面に配列が取得されますので、中の文字列を出力してみます。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 />";
}
取得できました!
![](https://eguweb.jp/wp-content/uploads/202201280022-00.jpg)
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にはメディアなどのレコードも入っているので、画像のファイル名などが色々と出てきているようです。
![](https://eguweb.jp/wp-content/uploads/202201280023-00.jpg)
![](https://eguweb.jp/wp-content/uploads/202201280025-00-1024x519.jpg)
![](https://eguweb.jp/wp-content/uploads/202201280026-00-1024x527.jpg)
もし、投稿だけにしたい場合は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 />";
}
出てきました!投稿のみが表示されています。
![](https://eguweb.jp/wp-content/uploads/202201280027-00.jpg)
最初のひとつ目であれば、$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;
取得できました!
![](https://eguweb.jp/wp-content/uploads/202201280047-00.jpg)
まとめ
他にも下記のような、クエリの指定方法が色々とあります。
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")
色々と書き方を覚えると、役に立ちそうです!また次回以降でも、詳しく書いていきたいと思います!ご参考ください😃