[WordPress] カスタマイズした wpdb クラスを使用する方法
WordPress で DB にアクセスするには wpdb クラスを使います。グローバル変数 $wpdb でアクセスすることが可能です。
この辺のことは以下のエントリをご参考ください。
WordPress の設定を使ってデータベースにアクセスする方法
しかし、WordPress をカスタマイズする際にプラグインやテーマだけではどうしても出来ずに DB とのやり取りをカスタマイズしたい場合が出て来た時に、wpdb クラスを直接カスタマイズするのはバージョンアップの時などを考えるとやりたくありません。
そういう場合に有効な方法が wp-content/db.php をいうファイルを使う方法です。wpdb クラスは wp-includes/wp-db.php で定義されていますが、それを読み込んでいるのは wp-includes/functions.php の require_wp_db という関数です。その関数のコードは以下のようになっています。
/** * Load the correct database class file. * * This function is used to load the database class file either at runtime or by * wp-admin/setup-config.php We must globalise $wpdb to ensure that it is * defined globally by the inline code in wp-db.php. * * @since 2.5.0 * @global $wpdb WordPress Database Object */ function require_wp_db() { global $wpdb; if ( file_exists( WP_CONTENT_DIR . '/db.php' ) ) require_once( WP_CONTENT_DIR . '/db.php' ); else require_once( ABSPATH . WPINC . '/wp-db.php' ); }
wp-content/db.php というファイルは素の WordPress にはないのですが、このファイルを作っておくと wp-db.php をインクルードせずに db.php をインクルードしてくれるようになります。つまり wpdb クラスのカスタマイズが可能ということです。
wp-content/db.php で以下のような感じで wpdb クラスを継承したクラスを定義してそのクラスのインスタンスを $wpdb に入れておけば、WordPress 全体でカスタマイズした wpdb クラスを使用することができます。
require_once( ABSPATH . WPINC . '/wp-db.php' ); class my_wpdb extends wpdb { // カスタマイズしたい wpdb のメソッドをオーバーライドする } if ( ! isset($wpdb) ) { $wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); }
関連する投稿
2 comments
コメントをどうぞ
Additional comments powered by BackType
3flippant…
…
Cheap Private Proxy…
WordPress ã?§ DB ã??ã?¢ã?¯ã??ã??ã?™ã??ã??ã?¯ wpdb ã?¯ã?©ã??ã?’ä?¿ã??ã??ã?™ã??ã?°ã??ã??ã??ã??変æ?° $wpdb…