ワードプレスのデータベース内から$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")
色々と書き方を覚えると、役に立ちそうです!また次回以降でも、詳しく書いていきたいと思います!ご参考ください😃