オリジナルプラグインを作成する場合、そのプラグインで使用するデータベースのテーブルが必要な場合があります。そのためのプログラムを備忘録として記録しておきます。
1.プラグインの作成と有効化した時の処理
プラグインの宣言と、メニューへの追加、そしてプラグインを有効化した時にテーブルを作成する処理です。
<?php /* Plugin Name: Custom Plugin Author: Plugin URI: Description: カスタムプラグイン Version: 0.1 Author URI: */ /* テーブルを作成する関数 */ function plugin_table(){ global $wpdb; $charset_collate = $wpdb->get_charset_collate(); /* テーブル名 */ $tablename = $wpdb->prefix . "testplugin"; $sql = "CREATE TABLE $tablename ( id mediumint(11) NOT NULL AUTO_INCREMENT, name varchar(80) NOT NULL, username varchar(80) NOT NULL, email varchar(80) NOT NULL, age smallint(3) NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; /* プラグイン用のテーブルを作成する際には dbDelta() 関数を利用が推奨 */ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } /* プラグインが有効化するときのフック用関数 */ register_activation_hook( __FILE__, 'plugin_table' ); /* メニューの追加 */ function test_menu(){ add_menu_page('テストプラグイン', '管理', 'activate_plugins', 'test_menu', 'test_list_page', '', 4); } /* アクションフックでメニュー登録 */ add_action('admin_menu', 'test_menu'); function test_list_page(){ include "displaylist.php"; }
2.CSVデータインポート処理
displaylist.phpで、CSVデータインポート機能を持ったページを表示させます。
<?php echo '<div><h3>CSVインポート処理</h3>'; echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" enctype="multipart/form-data">'; echo '<input type="file" name="upload_csv_file" id="upload_csv_file" value="upload_csv_file">'; echo '<button type="submit" onClick="return confirm(\'価格データ(CSV)をアップロードします。\nよろしいですか?\');">CSVデータベースアップロード</button>'; echo '</form>'; echo '</div>'; <?php global $wpdb; // テーブル名 $tablename = $wpdb->prefix."customplugin"; // CSVファイルインポート処理 if(isset($_POST['butimport'])){ // File extension $extension = pathinfo($_FILES['import_file']['name'], PATHINFO_EXTENSION); // ファイルが選択されているかつCSVファイルか if(!empty($_FILES['import_file']['name']) && $extension == 'csv'){ $totalInserted = 0; // Open file in read mode $csvData = fopen($_FILES['import_file']['tmp_name'], 'r'); fgetcsv($csvData); // 1行目を削除 // 1行ずつ読込 while(($csvData = fgetcsv($csvFile)) !== FALSE){ // 文字コードチェック関数 $encode_base = checkEncodeOfFile($csvData); // 文字コードをUTF8に変換 mb_convert_variables("UTF-8", $encode_base, $csvData); // 列の行数を取得 $dataLen = count($csvData); // 4列ではない行はスキップ if( !($dataLen == 4) ) continue; // 値を変数に $name = trim($csvData[0]); $username = trim($csvData[1]); $email = trim($csvData[2]); $age = trim($csvData[3]); // すでにレコードがあるか重複チェック $cntSQL = "SELECT count(*) as count FROM {$tablename} where username='".$username."'"; $record = $wpdb->get_results($cntSQL, OBJECT); if($record[0]->count==0){ // 変数が空かどうかを確認します if(!empty($name) && !empty($username) && !empty($email) && !empty($age) ) { // レコードを挿入 $wpdb->insert($tablename, array( 'name' =>$name, 'username' =>$username, 'email' =>$email, 'age' => $age )); if($wpdb->insert_id > 0){ $totalInserted++; } } } } echo "<p style='color: green;'>登録行数 : ".$totalInserted."</p>"; }else{ echo "<p style='color: red;'>Invalid Extension</p>"; } } // 文字コードチェック関数 function checkEncodeOfFile($str){ // 文字コード一覧 $charArys = array('sjis', 'sjis-win', 'euc-jp', 'ASCII', 'jis', 'utf-8'); foreach ($charArys as $charset){ if ( $str == mb_convert_encoding($str, $charset, $charset) ){ return $charset; } } return $charset; }
参考URL
https://www.webopixel.net/wordpress/637.html