[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…