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 レスポンシブ テンプレート

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

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

記事を読む

WordPress プラグイン「 Search Everything 」

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

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

記事を読む

wordpress カスタム投稿で 2ページ目以降が404

wordpress カスタム投稿で 2ページ目以降が404になってしまう

wordpress のカスタム投稿で、ニュースのページを作っていました。 ニュース一覧で、ペー

記事を読む

wordpress カスタム投稿を一覧(ループ)で表示する

wordpress カスタム投稿を一覧(ループ)で表示する

カスタム投稿を一覧で表示する方法がいろいろあります。 query_posts 関数が非推奨になって

記事を読む

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

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

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

記事を読む

Wordpress 自作フォーム

WordPress 自作フォーム その1(サンプルと設置)

Wordpress でプラグインを使わずにフォームをやってみます。 簡単に名前、メールアドレス、メ

記事を読む

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

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

記事を読む

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 管理画面のテキスト入力欄で(ビジュアルタブの

記事を読む

All-in-One WP Migration で サーバ移動

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

1.移行元サイトでのデータエクスポート 「All-in-One WP Migration(公式リン

記事を読む

WordPress Warning エラー

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

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

記事を読む

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

→もっと見る

    • 202403
      Mon Tue Wed Thu Fri Sat Sun
      123
      45678910
      11121314151617
      18192021222324
      25262728293031
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑