WordPressのDB関数を使用しています。
PDOを使う場合は適宜書き直してください。
require_once ('serialcode.php');
などとして、フォーム送信プログラムの中で呼び出して使います。
$serialcode = get_serialcode();などで取得できます。
<?php
// WordPressのDB接続を使用するためにincludeする
require_once( $_SERVER["DOCUMENT_ROOT"] . '/wp-load.php' );
/**
* wpdbを利用してシリアル番号をDBから取得する
*
* @global class $wpdb WordPressのDB操作用変数
*
* @param string $service_id シリアル番号の頭文字
* @param string $start_year シリアル番号の年を表す文字の開始年
* @param string $start_num シリアル番号の最初の数値
*
* @return string シリアル番号
*/
function get_serialcode($service_id = 'SP', $start_year = '2009', $start_num = 1) {
global $wpdb;
$current_year = date('Y'); //現在の年
//開始年から現在の年数を計算して小文字のアルファベット年をつくる
$yearchar_num = $current_year - $start_year;
$year_id = 'a';
for ($i = 1; $i < $yearchar_num; $i++) {
$year_id++;
}
$last_serial_record = get_last_serialcode(); //DBの最新シリアルコードを取得
if ($last_serial_record) {
//取得したserialcodeのyear_idが現在と同じか判断してyear_numを生成
if ($year_id === $last_serial_record->year_id) {
$year_num = $last_serial_record->year_num + 1;
} else {
$year_num = 1;
}
} else {
//serialcodeテーブルが無いときは作成して最初のデータを準備する
create_table_serialcode();
$year_num = $start_num;
}
// serialcodeを作成してDBに入力
$serialcode = $service_id . $year_id . sprintf('%07d', $year_num);
$insert_serial_code = insert_serialcode($year_num, $year_id, $service_id, $serialcode);
return $serialcode;
}
/**
* wpdbを利用してserialcode用のDBを作成する
*
* @global class $wpdb WordPressのDB操作用変数
*
* @return bool DBの作成が成功したらtrue,失敗したらfalse
*
*/
function create_table_serialcode() {
global $wpdb; // WordPressのDB操作用変数
$query = "
CREATE TABLE serialcode (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
year_num INT,
year_id VARCHAR(16),
service_id VARCHAR(16),
serialcode VARCHAR(32),
post_json TEXT,
created_at DATETIME,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8";
$return = $wpdb->query( $query );
return $return;
}
/**
* wpdbを利用して最新のserialcodeのレコードを取得する
*
* @global class $wpdb WordPressのDB操作用変数
*
* @return object データベースserialcodeから取得した値
*
*/
function get_last_serialcode() {
global $wpdb; // WordPressのDB操作用変数
$query = "
SELECT * FROM serialcode ORDER BY id DESC LIMIT 1;
";
$results = $wpdb->get_results( $query );
if ($results) {
$return = $results[0];
} else {
$return = false;
}
return $return;
}
/**
* wpdbを利用して各カラムにデータをINSERTする
*
* @global class $wpdb WordPressのDB操作用変数
*
* @param int $year_num year_numカラムに挿入する値
* @param string $year_id year_idカラムに挿入する値
* @param string $service_id service_idカラムに挿入する値
* @param string $serialcode serialcodeカラムに挿入する値
* @param string $post_json POST情報をjson化してpost_jsonカラムに挿入する
*
* @return bool INSERTが成功したらtrue,失敗したらfalse
*
*/
function insert_serialcode($year_num, $year_id, $service_id, $serialcode) {
if (version_compare(PHP_VERSION, '5.1.0', '>=')) {//PHP5.1.0以上の場合のみタイムゾーンを定義
date_default_timezone_set('Asia/Tokyo');//タイムゾーンの設定(日本以外の場合には適宜設定ください)
}
global $wpdb; // WordPressのDB操作用変数
$post_json = json_encode($_POST);
$table = 'serialcode';
$data = array(
'year_num' => $year_num, // %d
'year_id' => $year_id, // %s
'service_id' => $service_id, // %s
'serialcode' => $serialcode, // %s
'post_json' => $post_json, // %s
'created_at' => date('Y-m-d H:i:s'), // %s
);
$format = array(
'%d',
'%s',
'%s',
'%s',
'%s',
'%s',
);
$return = $wpdb->insert( $table, $data, $format );
return $return;
}