手順としては、
1.テーブルの作成
2.wp-db.php の書き換え(代わりに bd.php の作成とオーバーライド)
3.PHP コードでデータベースにアクセス
となります。
1.テーブルの作成
扱いたい自作テーブルを作成する際に気を付けることは一つだけ。
テーブル名に必ず Wordpress と同じプリフィックス(接頭辞)をつけよう。
例えば Wordpress のプリフィックスが初期設定のまま「wp_」となっている場合は、新しいテーブル名を wp_xxx (xxxは任意)にしなさいということです。
こうしなくてもアクセスはできるけれど、かなり面倒くさいことをしなければならないようです。
2.wp-db.php の書き換え(代わりに bd.php の作成とオーバーライド)
Wordpress でデータベースを扱うには、Wordpress 専用のメソッドを活用します。
(しなくてもできるけれど、かなり面倒・・・以下略)
専用メソッドから自作テーブルにアクセスするためには、自作テーブルを「仲間だよ」と認識させてあげなければなりません。
Wordpress がインストールされているフォルダから見て、 wp-includes/wp-db.php というファイルを開くと、以下の
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta', 'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta' );
という変数が設定されています。
この配列に格納されている名前が専用メソッドで扱える「仲間」です。
厳密に言うと、この名前にプリフィックスを付け足したものが扱えるテーブルとなります。
自作テーブルを扱えるようにしたければ、以下のようにプリフィックスを除いたテーブル名を付け足してあげれば良いです。
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta', 'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta', 'xxx' );
ただし!wp-includes フォルダの中にあるファイルを直接いじると、wordpress のアップデート時などに初期化されてしまう可能性があります。また、デリケートなファイルなのでなるべく弄りたくないというのが正直なところ。
そこで、子テーマのように wp-db.php を書き換える専用のファイルを作ります。
wp-content フォルダの中に db.php という名前のファイルを新規作成します。
そして以下のコードを記入すれば、先ほど説明した wp-db.php を書き換えたのと同じ効果が得られます。
<?php
require_once( ABSPATH . WPINC . '/wp-db.php' );
class my_wpdb extends wpdb {
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta', 'xxx' );
}
if ( ! isset($wpdb) ) {
$wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
?>
require_once( ABSPATH . WPINC . '/wp-db.php' );
class my_wpdb extends wpdb {
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta', 'xxx' );
}
if ( ! isset($wpdb) ) {
$wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
?>
<参考:カスタマイズしたwqdbクラスを使用する方法(http://blog.syuhari.jp/archives/1782)>
3.PHP コードでデータベースにアクセス
PHP で自作テーブルにアクセスするサンプルコードは以下です。
<?php
global $wpdb; // メソッド使用時は、グローバルでクラス宣言をする決まり
$result = $wpdb->get_results('SELECT * FROM wp_xxx');if (!$result) die('error.');foreach($result as $row) { echo $row->xxx_id;}
?>
global $wpdb; // メソッド使用時は、グローバルでクラス宣言をする決まり
$result = $wpdb->get_results('SELECT * FROM wp_xxx');if (!$result) die('error.');foreach($result as $row) { echo $row->xxx_id;}
?>
wpdb クラスを宣言することで、扱えるテーブル限定で通常のクエリを実行することができます。
上の例では、 xxx_id というカラムを設定していて、その内容を表示しています。
以上、備忘録でした。
0 件のコメント:
コメントを投稿