【WordPress】$wpdbで自作テーブルを扱う場合|wpdbクラスのカスタマイズ
WordPressには、データベースを操作できるwpdbクラスがあります。
自作テーブルを扱う場合にはそのwpdbクラスをカスタマイズする必要がありますが、今回は、そのカスタマイズ例となります。
wpdbクラスをカスタマイズする方法
wpdbクラスでは、そのインスタンスとなるグローバル変数の$wpdbにアクセスすることで、データベースを扱えます。
wpdbクラスは、wp-includes/wp-db.phpファイルで定義されていますが、wpdbクラスをカスタマイズするには、wp-contentフォルダの直下にdb.phpファイルを作成します。
それにより、db.phpファイルが読み込まれるので、そのファイル内でwpdbクラスを継承したサブクラスを定義することで、wpdbクラスをカスタマイズできます。
$wpdbで自作テーブルを扱えるようにする例
以下、db.phpファイルに記述するコードの例となり、wpdbクラスを継承したサブクラスでプロパティをオーバーライドして、$wpdbオブジェクトで自作テーブルを扱えるようにしています。
class my_wpdb extends wpdb {
// プロパティ$tablesをオーバーライド
var $tables = [
'posts',
'comments',
'links',
'options',
'postmeta',
'terms',
'term_taxonomy',
'term_relationships',
'termmeta',
'commentmeta' ,
'sample_table' // 追加したテーブル
];
}
// my_wpdbクラスのインスタンスを$wpdbにセット
$wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
クラスのオーバーライド(上書き)について
wpdbクラスはWordPressのバージョンによって変更される可能性もあるので、wpdbクラスを継承してカスタマイズする場合は、wpdbクラスが定義されている自身のwp-includes/wp-db.phpファイルを確認した上で、オーバーライド(上書き)してください。
自作テーブルを扱うwpdbクラスのカスタマイズについて
上記のwpdbクラスを継承したサブクラスmy_wpdbでは、wpdbクラスのプロパティ$tablesをオーバーライド(上書き)しています。
$tablesは配列となり、要素にはwpdbクラスで扱えるデフォルトのテーブルの一部が定義されていますが、その要素に作成したテーブル名を追加します。例ではテーブル名sample_tableを追加しています。
また、テーブル名はプレフィックス(接頭辞)なしで指定します。
そして、my_wpdbクラスのインスタンスを$wpdbにセットします。それにより、$wpdbのオブジェクトで自作テーブルを扱えるようになります。
テーブルからデータを取得する場合
wpdbクラスでデータベースからデータを取得する方法については、以下のリンク先を参考にしてみてください。