wpdbを利用した取得
$wpdb->get_results()を利用して、任意のSQLを実行することが可能です。試しに、wp_postsテーブルから全てのレコードを取得して見ましょう。
index.php内に記述
<?php
$results = $wpdb->get_results('SELECT * FROM wp_posts');
?>
<pre><?php var_dump($results[0]); ?></pre>
<?php foreach($results as $key => $result){ ?>
<h2><?php print $key ?>番目の投稿</h2>
<?php print $result->post_content; ?>
<?php } ?>
$resultsの内容をvar_dumpしてみると、どのようなデータになっているかを確認することも可能です。
class stdClass#264 (23) {
public $ID =>
string(1) "1"
public $post_author =>
string(1) "1"
public $post_date =>
string(19) "2018-06-02 01:02:30"
public $post_date_gmt =>
string(19) "2018-06-01 16:02:30"
public $post_content =>
string(126) "WordPress へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてください !"
public $post_title =>
string(12) "Hello world!"
public $post_excerpt =>
string(0) ""
public $post_status =>
string(7) "publish"
public $comment_status =>
string(4) "open"
public $ping_status =>
string(4) "open"
public $post_password =>
string(0) ""
public $post_name =>
string(11) "hello-world"
public $to_ping =>
string(0) ""
public $pinged =>
string(0) ""
public $post_modified =>
string(19) "2018-06-02 01:02:30"
public $post_modified_gmt =>
string(19) "2018-06-01 16:02:30"
public $post_content_filtered =>
string(0) ""
public $post_parent =>
string(1) "0"
public $guid =>
string(62) "https://wordpress-for-engineers-thisprodigious.c9users.io/?p=1"
public $menu_order =>
string(1) "0"
public $post_type =>
string(4) "post"
public $post_mime_type =>
string(0) ""
public $comment_count =>
string(1) "1"
}
このように、$resultsにはwp_postsテーブルのレコードが「stdClass」の配列として格納されていることが確認できます。
wpdbとは?
では、そもそも$wpdbとは何なのでしょうか?
<?php var_dump($wpdb); ?>
上記のように記述して確かめてみると
- $wpdbはwpdb型のオブジェクト
- num_rowsプロパティには最後に実行したSQLの結果行数が保存されている
- last_queryプロパティには最後に実行したSQLが保存されている
- last_resultプロパティには最後に実行したSQLの結果が保存されている
- queriesプロパティには過去に実行されたSQLに関する配列が保存されている(ただし、SAVE_QUERIESをtrueに設定している場合のみ。)
などの特徴があることがわかります。
wpdbの役割
wpdbクラスのオブジェクトは、wordpressにおいていわばPHPとDBの橋渡しを行う役割を果たしています。これから見ていくWP_Queryクラスなどのオブジェクトも、内部的にはwpdbを利用してDB上のテーブルから情報を取得しています。
テーブル名の利用
さらに、$wpdbのvar_dumpの結果について、以下の部分を確認して見ましょう。
public $comments =>
string(11) "wp_comments"
public $commentmeta =>
string(14) "wp_commentmeta"
public $links =>
string(8) "wp_links"
public $options =>
string(10) "wp_options"
public $postmeta =>
string(11) "wp_postmeta"
public $posts =>
string(8) "wp_posts"
public $terms =>
string(8) "wp_terms"
public $term_relationships =>
string(21) "wp_term_relationships"
public $term_taxonomy =>
string(16) "wp_term_taxonomy"
public $termmeta =>
string(11) "wp_termmeta"
public $usermeta =>
string(11) "wp_usermeta"
public $users =>
string(8) "wp_users"
このように、各テーブルの名称がプロパティとして保存されています。そのため、get_resultsを利用してデータを取得する際には
<?php
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts");
?>
のような記述も一般的です。
$wpdb->get_resultsによる取得は非常に基本的です。 実はこの後に出てくるDB操作を行うためのオブジェクトでも内部ではget_resultsを利用しています。処理内容をイメージできるように、まずはget_resultsを利用していくつかSQLを発行して挙動を確かめて見ましょう。
実践の際には直接$wpdbを利用することは稀ですが、定型的なデータ取得だけでは不十分な場合に時々必要になります。