WordPress 独自テーブル
WordPress で独自テーブルを作ってみようと思います。
独自テーブルのデータ
今回のデータは簡単にテキストデータにします。
適当に野菜などの商品名と値段が、カンマ区切りであるとします。
yasai.txt
これをテーマ内に設置しておきます。
独自テーブル名と接頭辞
独自のテーブルも、wp-config.php ファイル内に定義されている接頭辞(デフォルトは wp_ )を使って、データベーステーブル名を定義する必要があります。
$table_name = $wpdb->prefix . 'テーブル名';
この値は、$wpdb->prefix 変数に格納されています。
WordPress CREATE文 テーブルの生成
テーブルの生成はdbDelta 関数を使って以下のようにします。
//dbDelta 関数の読み込み require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); //テーブル生成 $sql = "CREATE TABLE " . $wpdb->prefix . 'dokuzi' . "( id int not null auto_increment, yasai tinytext not null, price int(255) default 0 not null, primary key(id) );"; add_option("dokuzi_version", '1.0'); dbDelta($sql);
テキストデータの読み込み
テキストデータを読み込んで、SQL文を作ります。
$yasai_data = file(get_template_directory_uri().'/yasai.txt'); $ins_values = ""; foreach($yasai_data as $yasai){ if($yasai){ $yasai = mb_convert_encoding($yasai, "UTF-8", "SJIS"); $yasai_arr = explode(',', $yasai); $ins_values .= "('". $yasai_arr[0]. "',".$yasai_arr[1] ."),"; } } $ins_values = substr($ins_values, 0, -1);//最後のカンマ取る
文字化けする場合は、mb_convert_encoding で文字コードを変換します。
echo $ins_values;で中身を見てみるとこのような感じです。
これを次に INSERT文 で SQL文 にくっつけます。
WordPress INSERT文 データの挿入
$ins_values を INSERT文でくっつけます。
$sql ="insert into ".$wpdb->prefix.$table_name. " (yasai,price) VALUES ".$ins_values.";"; $wpdb->query($sql);
WordPress 独自テーブル サンプル
1回だけテーブルを生成し、データを挿入出来るように、$wpdb->get_var で、「テーブル名がなかったら」という制限が必要です。
テーブル生成からデータ挿入をまとめるとこのようになります。
function.php
//独自テーブルを生成しデータを挿入する function dokuzi_setup_table($table_name) { global $wpdb; //テーブル名がなかったら if ($wpdb->get_var("show tables like '" . $wpdb->prefix . $table_name . "'") != $wpdb->prefix . $table_name) { //dbDelta 関数の読み込み require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); //テーブル生成 $sql = "CREATE TABLE " . $wpdb->prefix . $table_name . "( id int not null auto_increment, yasai tinytext not null, price int(255) default 0 not null, primary key(id) );"; add_option($table_name."_version", '1.0'); dbDelta($sql); //データの挿入 $yasai_data = file(get_template_directory_uri().'/yasai.txt'); $ins_values = ""; foreach($yasai_data as $yasai){ if($yasai){ $yasai = mb_convert_encoding($yasai, "UTF-8", "SJIS"); $yasai_arr = explode(',', $yasai); $ins_values .= "('". $yasai_arr[0]. "',".$yasai_arr[1] ."),"; } } $ins_values = substr($ins_values, 0, -1);//最後のカンマ取る $sql ="insert into ".$wpdb->prefix.$table_name. " (yasai,price) VALUES ".$ins_values.";"; $wpdb->query($sql); } } //独自テーブル生成を実行 dokuzi_setup_table('dokuzi');
これをテーマ内の function.php に書き足してテーマにアクセスします。
phpMyAdmin でDBを確認してみます。
wp_dokuzi というこのようなテーブルが出来ています。
WordPress SELECT文 データの取得
wp_dokuzi テーブルから、データを取得し表示してみます。
//独自テーブルからデータを取得して表示 function dokuzi_select_table($table_name) { global $wpdb; $sql = "select yasai,price from ". $wpdb->prefix . $table_name ." where price='100';"; $ddb= $wpdb->get_results($sql); echo '<table> <tr><th>商品</th><th>値段</th></tr>'; for($i=0;$i<count($ddb);$i++){ echo '<tr>'; echo '<td>'.$ddb[$i]->yasai.'</td><td>'.$ddb[$i]->price.'円</td>'; echo '</tr>'; } echo '</table>'; } // データを表示する dokuzi_select_table('dokuzi');
where price=’100′ で値段を100円のものに絞っています。
あれ・・・今気づきましたが、
「キューイ」・・・正しくは「キウイ」かもしれません・・・まあ、いっか・・・
WordPress DROP文 テーブル削除
//テーブル削除 function dokuzi_drop_table($table_name) { global $wpdb; if ($wpdb->get_var("show tables like'" . $wpdb->prefix . $table_name . "'") == $wpdb->prefix . $table_name) { $wpdb->query("DROP TABLE IF EXISTS ".$wpdb->prefix . $table_name); delete_option( "oxy_db_version" ); } }
独自テーブル削除の関数も用意したので、最後にプラグインの場合もやっておきます。
WordPress 独自テーブル プラグインの場合
独自テーブルは、プラグインで使うことが多いと思います。
ここまでやってきた関数を、以下の様にプラグインを有効・無効・削除時にハックし、実行するようにします。
//プラグインを有効・無効・削除時のハック register_activation_hook(__FILE__, 'plname_activate');//プラグインを有効にした時 register_deactivation_hook (__FILE__, 'plname_stop');//プラグインを無効にした時 register_uninstall_hook (__FILE__, 'plname_end');//プラグインを削除時 //プラグインを有効にした時 function plname_activate() { dokuzi_setup_table('dokuzi');//テーブル生成とデータの挿入 } //プラグイン無効にした時 function plname_stop() { dokuzi_drop_table('dokuzi');//テーブル削除 } //プラグイン削除時 function plname_end() { dokuzi_drop_table('dokuzi');//テーブル削除 }
関連記事
-
PHPフレームワークについて
フレームワークとは? 開発する際に頻繁に必要とされる汎用的な機能をまとめて提供している、アプリケー
-
WordPress リビジョンを削除し、テーブルを最適化してDBの容量を削減
WordPress リビジョン機能 リビジョンは過去の記事を保存してくれる WordPress の
-
WordPress の PHP をちょっと見てみよう Ⅱ
前記事の続きで、wp-settings.php の68行目あたりから見ていきます。 <今回のピ
-
WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」
WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.
-
WordPress レスポンシブ テンプレート の メニューやブログの設置
前回の 「WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダ
-
WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード
WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード
-
WordPress の PHP をちょっと見てみよう Ⅰ
WordPress には、たくさんのファイルが入っています。 ここではテーマ内ではなく、トップ
-
wordpress カスタム投稿を一覧(ループ)で表示する
カスタム投稿を一覧で表示する方法がいろいろあります。 query_posts 関数が非推奨になって
-
WordPress カレンダー カスタマイズ
WordPressでカレンダーの表示部分をいじってみようかと思います。 どうやら、カレンダー関
-
WordPress レスポンシブ テンプレート 元にサイトを作ってみる その2
DEMO を見る カスタム投稿タイプ functions.php 今回は3つのリストメニュ