WordPressで自作のテーブルに$wpdbを使ってアクセスするには、wp-includes/wp-db.phpにテーブル名を記載すること

以前、真木さんからデータベースのテーブルを追加するのはあまりおすすめしないと言われたのだが、データ数と利便性を考えてWordPressのデータベースに自作のテーブルを追加することにした。

というのも、先日開催されたWordCamp Tokyo2011に、kmikage氏とbluemoon氏にくっついて放送部としてお手伝いさせていただいたのだが、会場リーダーをつとめられた西川さんから”$wpdbがいいらしい”というお話をいただき、これを使えばデータベースを直接いじることのリスクは下がる(あくまで下がる)という理解でさっそく使ってみることにした。

で、まずはテストとして、wp_testというテーブルをつくり記事ページに下記のコードを記載してみた。

$posts = $wpdb->get_results(“SELECT * FROM $wpdb->test”);
var_dump($posts);

結果

うーん、

これはテーブルが悪いのかと思いチェックしてみると

MAMP 1

なるほど、データベースの種別がMyISAMになっていないのと照合順序がおかしい。そりゃでないはずだよね。でも、ここを直せばばっちりでしょ!などと言いながら、訂正してブラウザをどや顔しながらリロード。

その後、ファイル名をいろいろ変えてチャレンジするもうまくいかず。で、試しにwp_usersをコピーしwp_copyusersとして同じようにしても表示されないのを確認。そこではじめて、どっかでテーブル名を宣言している可能性を考える。検索してみると、

[WordPress] カスタマイズした wpdb クラスを使用する方法 | Sun Limited Mt.

どうも、ここらへんな感じ。

wp-includes/wp-db.phpを開いてusersが宣言されている箇所を発見

Wp db php  SmartLight

ここに、’copyusers’と記入

Wp db php  SmartLight 1

で、ブラウザリロードしたところ無事にwp_copyusersのテーブルを表示することができた。で、先ほどのSun Limited Mt.さんのサイトは直接wp-db.phpをいじらずに自作テーブルにアプローチする方法だったと理解。なるほど!

先ほどはusersだったので、$global_tablesだったけど、マルチサイトで使うデータでなければこっちの$tablesでよさそう。

Wp db php  SmartLight 2

ということで、自作テーブルにアクセスできるようになったので、実装すすみます。