WordPress 独自テーブル

公開日: : PHP, WordPress

Wordpress 独自テーブル 商品名と料金

WordPress で独自テーブルを作ってみようと思います。

独自テーブルのデータ

今回のデータは簡単にテキストデータにします。
適当に野菜などの商品名と値段が、カンマ区切りであるとします。
yasai.txt
Wordpress 独自テーブル テキストデータ
これをテーマ内に設置しておきます。

独自テーブル名と接頭辞

独自のテーブルも、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;で中身を見てみるとこのような感じです。

表示結果
(‘きゃべつ’,200 ),(‘にんじん’,60 ),(‘玉ねぎ’,40 ),(‘じゃがいも’,40 ),(‘トマト’,140 ),(‘りんご’,120 ),(‘バナナ’,100 ),(‘みかん’,300 ),(‘いちご’,600 ),(‘キューイ’,100)

これを次に 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 . '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);
		
		//データの挿入
		$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を確認してみます。
Wordpress 独自テーブル MySQLデータ
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 独自テーブル Select文で検索

あれ・・・今気づきましたが、
「キューイ」・・・正しくは「キウイ」かもしれません・・・まあ、いっか・・・

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() {
	kakusu_drop_table('dokuzi');//テーブル削除
}
//プラグイン削除時
function plname_end() {
	dokuzi_drop_table('dokuzi');//テーブル削除
}

関連記事

WordPress カレンダー カスタマイズ

WordPress カレンダー カスタマイズ

WordPressでカレンダーの表示部分をいじってみようかと思います。 どうやら、カレンダー関

記事を読む

レンタルサーバでWordPressを設置してみよう!

WordPress.com 内に、ブラウザだけで無料でサイトを作成出来きるサービスもありますが、Wo

記事を読む

Wordpress 自作フォーム (チェックボックスなど)

WordPress 自作フォーム その3(チェックボックスなど)

以前、WordPress 自作フォーム その1の記事で Wordpress で自作フォームを作ってみ

記事を読む

Wordpress VR Test

WordPress で VR させて、360°のパノラマ画像を表示する

WordPress.com内ショートコードで VR させる WordPress.com内で、VR(

記事を読む

WordPress カレンダー カスタマイズ

WordPress カレンダー カスタマイズ(add_filter版)

前回、「WordPress の PHP をちょっと見てみよう Ⅲ」でフックをやったので、カレンダーで

記事を読む

WordPress Twenty Seventeen function.php

WordPress twentyseventeen の function.php を見る – その1

WordPress の最低限の機能だけのシンプルなテンプレートが欲しかったので、作っておくことにしま

記事を読む

MVCの典型的な相関図

PHPフレームワークについて

フレームワークとは? 開発する際に頻繁に必要とされる汎用的な機能をまとめて提供している、アプリケー

記事を読む

WordPress PHP

WordPress の PHP をちょっと見てみよう Ⅰ

WordPress には、たくさんのファイルが入っています。 ここではテーマ内ではなく、トップ

記事を読む

WordPress の PHP をちょっと見てみよう Ⅱ

WordPress の PHP をちょっと見てみよう Ⅱ

前記事の続きで、wp-settings.php の68行目あたりから見ていきます。 <今回のピ

記事を読む

WordPress レスポンシブ テンプレート 元にサイトを作ってみる その2

DEMO を見る カスタム投稿タイプ functions.php 今回は3つのリストメニュ

記事を読む

PHP WordPress

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WordPress Twenty Seventeen function.php
WordPress twentyseventeen の function.php を見る – その2

前回の続きです。 次のスターターコンテンツは、今回のシンプルテン

WordPress Twenty Seventeen function.php
WordPress twentyseventeen の function.php を見る – その1

WordPress の最低限の機能だけのシンプルなテンプレートが欲しか

WordPress Warning エラー
WordPress フォルダー・ファイル系の関数 is_dir や opendir や exif_imagetype で Warning エラー

Wordpress の管理画面でフォルダーの中身を読み込む関数 ope

Wordpress 自作フォーム (チェックボックスなど)
WordPress 自作フォーム その3(チェックボックスなど)

以前、WordPress 自作フォーム その1の記事で Wordpre

Javascript ノード の取得や挿入
Javascript ノードの取得や挿入

ノードの取得 ノードの取得(ダイレクトアクセス) document

→もっと見る

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
にほんブログ村 FC2 Blog Ranking
PAGE TOP ↑