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を利用することは稀ですが、定型的なデータ取得だけでは不十分な場合に時々必要になります。

results matching ""

    No results matching ""