本稿は下記案件の続きです。併せてご参照下さい。
やりたいこと
昨秋以降の原油価格上昇に加え円安とウクライナ情勢...と仕入コスト負担が急騰し、価格改定(値上げ)のニュースが後を絶ちません。
価格改定の度に、ホームページに記載している価格を手作業でひとつひとつ修正するのはしんどいので、データベースを参照するように直してみました。
データベースを準備しよう
まず、システムから抜いた価格情報(下図はイメージ)をCSVファイルにしてサーバにアップロード。
MySQLにインポートします。
mysql -h example.com -u ユーザ名 -pパスワード データベース名 --show-warnings
LOAD DATA
構文を使うので --show-warnings
を指定して接続するのがお勧めです。
今回は、WordPressと同じデータベースに作成します。
CREATE TABLE wp_foo_product (
code VARCHAR(50) NOT NULL PRIMARY KEY,
name VARCHAR(255),
class CHAR(2) NOT NULL,
old_price INT UNSIGNED DEFAULT 0,
new_price INT UNSIGNED DEFAULT 0,
url VARCHAR(160),
amazon_url VARCHAR(160)
);
LOAD DATA LOCAL INFILE '/tmp/wp_foo_product.csv'
INTO TABLE wp_foo_product
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';
エックスサーバーには phpMyAdmin が標準でインストールされているので、そこで操作しても良いですね。
WordPressをいじろう
テーブル名をWordPressに登録します。
書き方はwp-includes/wp-db.php
のwpdbクラスが参考になります。
<?php
require_once(ABSPATH.WPINC.'/wp-db.php');
class my_wpdb extends wpdb {
public $tables = array(
'posts',
'comments',
'links',
'options',
'postmeta',
'terms',
'term_taxonomy',
'term_relationships',
'termmeta',
'commentmeta',
'foo_product' ← ← ← 今回追加したテーブル名(プレフィックスは不要)
);
}
if(!isset($wpdb)) {
$wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
ユーザー定義関数をfunctions.php
に追加します。
品目コードを受け取ると、その価格を返却する、というものです。
function my_get_price($code) {
global $my_price_flag_new;
global $wpdb;
$product = $wpdb->get_row("SELECT * FROM $wpdb->foo_product WHERE code = '$code'");
if (is_null($product)) {
return '-';
}
if ($my_price_flag_new) {
return '\\ '.number_format($product->new_price);
} else {
return '\\ '.number_format($product->old_price);
}
}
価格を掲載しているHTMLを修正します。
価格表示箇所を、先ほどの関数呼び出しに置き換えます。
<tr>
<td>A1636CX</td>
<td>ほげほげ</td>
<td>\ 36,000</td>
<tr>
<td>A1636CX</td>
<td>ほげほげ</td>
<td><?php echo my_get_price('A1636CX') ?></td>
価格改定のタイミングでフラグ(グローバル変数)を立てれば、一斉に新価格に切り替えることができます。
$my_price_flag_new = true
HTMLの修正が必要なのは初回のみです。
次回からはテーブルを差し替えるだけで良く、大幅な省略化になりました。
さいごに
サーバ全体の仕組みを知っているバックエンドエンジニア(サーバサイドエンジニア)にとっては、正直なんてことない作業なのですが(開発というのもおこがましいくらい)、非IT企業でこういうことをサクっとやってみせると結構喜んでもらえます。