オリジナルプラグインを作成する場合、そのプラグインで使用するデータベースのテーブルが必要な場合があります。そのためのプログラムを備忘録として記録しておきます。
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
