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 . $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を確認してみます。
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() {
	dokuzi_drop_table('dokuzi');//テーブル削除
}
//プラグイン削除時
function plname_end() {
	dokuzi_drop_table('dokuzi');//テーブル削除
}

関連記事

Wordpress 自作フォーム 2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

WordPress 自作フォーム その2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

前回(WordPress 自作フォーム 1)のつづきです。 今回は細かいところや注意点とエラーなど

記事を読む

WordPress Twenty Seventeen function.php

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

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

記事を読む

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

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

前記事の続きで、wp-settings.php の91行目あたりから見ていきます。 次は、wp

記事を読む

WordPress Warning エラー

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

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

記事を読む

WordPress Twenty Seventeen function.php

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

前回の続きです。 次のスターターコンテンツは、今回のシンプルテンプレートには不要ですが、よくわ

記事を読む

WordPress レスポンシブ テンプレート

WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード

WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード

記事を読む

WordPress レスポンシブ テンプレート

WordPress レスポンシブ テンプレート の メニューやブログの設置

前回の 「WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダ

記事を読む

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

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

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

記事を読む

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

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

記事を読む

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

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

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

記事を読む

PHP WordPress

Message

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

WEBページをアプリっぽくする(サービスワーカーでホーム画面に追加)
WEBページをアプリっぽくする(サービスワーカーでホーム画面に追加)

前回作ったお絵かきページを、簡単にアプリっぽくしようと思います。 具

canvas タグでお絵描き(レスポンシブ)
canvas タグでお絵描き(レスポンシブ)

簡単なメモ張みたいなものが欲しいので作ってみました。 canvas

フルスクリーンを CSS だけで、vw, vh, vmin, vmax を試してみる(スクロールバーも消したい)
フルスクリーンを CSS だけで、vw, vh, vmin, vmax を試してみる(スクロールバーも消したい)

ビューポートの単位 vw, vh, vmin, vmax CSS で

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

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

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

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

→もっと見る

    • 201905
      Mon Tue Wed Thu Fri Sat Sun
      12345
      6789101112
      13141516171819
      20212223242526
      2728293031
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑