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

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

記事を読む

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

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

記事を読む

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

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

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

記事を読む

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

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

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

記事を読む

WordPress PHP

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

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

記事を読む

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

「レスポンシブ テンプレート の メニューやブログの設置」の記事では、メニューやブログの設置例をやっ

記事を読む

リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress リビジョン機能 リビジョンは過去の記事を保存してくれる WordPress の

記事を読む

WordPress プラグイン「 Search Everything 」

WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」

WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.

記事を読む

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

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

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

記事を読む

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

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

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

記事を読む

PHP WordPress

Message

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

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js
WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラーの状態 WordPress 管理画面のテキ

wordpress タイトルの変更
WordPress タイトルの変更

テンプレートタグ the_title(); get_the_title

All-in-One WP Migration で サーバ移動
「All-in-One WP Migration」プラグインで 簡単に WordPress のサーバー移行する手順メモ

1.移行元サイトでのデータエクスポート 「All-in-One WP

DNSサーバーとは
ドメインとは?DNSサーバーとは?

ドメインとは? ドメインとは? ドメインとは、インターネット上のネ

javascriptで複数同じ名前のformの値を取得する
javascriptで複数同じ名前のformの値を取得するとエラー Cannot read property ‘value’ of undefined

Javascript で value の値を取得する このようなHT

→もっと見る

    • 202407
      Mon Tue Wed Thu Fri Sat Sun
      1234567
      891011121314
      15161718192021
      22232425262728
      293031
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑