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');//テーブル削除
}
関連記事
-
-
WordPress 自作フォーム その2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)
前回(WordPress 自作フォーム 1)のつづきです。 今回は細かいところや注意点とエラーなど
-
-
「All-in-One WP Migration」プラグインで 簡単に WordPress のサーバー移行する手順メモ
1.移行元サイトでのデータエクスポート 「All-in-One WP Migration(公式リン
-
-
レンタルサーバでWordPressを設置してみよう!
WordPress.com 内に、ブラウザだけで無料でサイトを作成出来きるサービスもありますが、Wo
-
-
wordpress カスタム投稿で 2ページ目以降が404になってしまう
wordpress のカスタム投稿で、ニュースのページを作っていました。 ニュース一覧で、ペー
-
-
WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」
WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.
-
-
PHPフレームワークについて
フレームワークとは? 開発する際に頻繁に必要とされる汎用的な機能をまとめて提供している、アプリケー
-
-
WordPress レスポンシブ テンプレート の メニューやブログの設置
前回の 「WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダ
-
-
WordPress フォルダー・ファイル系の関数 is_dir や opendir や exif_imagetype で Warning エラー
Wordpress の管理画面でフォルダーの中身を読み込む関数 opendir でエラー Word
-
-
wordpress カスタム投稿を一覧(ループ)で表示する
カスタム投稿を一覧で表示する方法がいろいろあります。 query_posts 関数が非推奨になって
-
-
WordPress レスポンシブ テンプレート 元にサイトを作ってみる その2
DEMO を見る カスタム投稿タイプ functions.php 今回は3つのリストメニュ