1
1

More than 1 year has passed since last update.

WordPressから自作テーブルを利用する

Last updated at Posted at 2022-07-24

本稿は下記案件の続きです。併せてご参照下さい。

やりたいこと

昨秋以降の原油価格上昇に加え円安とウクライナ情勢...と仕入コスト負担が急騰し、価格改定(値上げ)のニュースが後を絶ちません。
価格改定の度に、ホームページに記載している価格を手作業でひとつひとつ修正するのはしんどいので、データベースを参照するように直してみました。

データベースを準備しよう

まず、システムから抜いた価格情報(下図はイメージ)をCSVファイルにしてサーバにアップロード。
MySQLにインポートします。
image.png

MySQLにログイン
mysql -h example.com -u ユーザ名 -pパスワード データベース名 --show-warnings

LOAD DATA構文を使うので --show-warnings を指定して接続するのがお勧めです。
今回は、WordPressと同じデータベースに作成します。

MySQLからテーブル作成
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)
);
MySQLでインポート
LOAD DATA LOCAL INFILE '/tmp/wp_foo_product.csv'
INTO TABLE wp_foo_product
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

エックスサーバーには phpMyAdmin が標準でインストールされているので、そこで操作しても良いですね。
image.png

WordPressをいじろう

テーブル名をWordPressに登録します。
書き方はwp-includes/wp-db.phpのwpdbクラスが参考になります。

wp-content/db.php
<?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に追加します。
品目コードを受け取ると、その価格を返却する、というものです。

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企業でこういうことをサクっとやってみせると結構喜んでもらえます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1