WooCommerceをカスタマイズするプラグインを作ろう・その2 DBを設計する

 

WooCommerce と EC-CUBE のデータベースを比べてみる

 

WooCommerceにEC-CUBEのような商品の「規格」機能を持たせたいということでプラグインを作るわけですから、まず双方の商品情報のDBを比べてみないといけません。
それでは早速両方のDBを比べてみたいと思います。

 

WooCommerceの場合は商品情報に関係するDBのテーブルは2種類のみのようです。

wp_post
wp_postmeta

このwp_postは通常のブログの投稿を記録するテーブルで、この部分のテーブルの構造に変更は加えていないようです。(多分)
そして、wp_postmetaはカスタムフィールド用のテーブルで、ここに値段などの情報を入れているようですね。
このテーブル構造ではEC-CUBEのような複雑な種類の商品をサポートすることができないでしょう。

 

対して、EC-CUBEですが商品の種類を「規格」と呼んでおり、下記のテーブルを商品管理に使用します。

dtb_products
dtb_products_class
dtb_class
dtb_classcategory

同一商品内のすべての商品に共通する情報はdtb_productsに、規格ごとに異なる情報はdtb_products_classに格納されます。
規格の名称はdtb_classに、規格の各項目はdtb_classcategoryに格納されます。

正直、「規格」という呼び名とそれに相当するClassという単語にそれぞれ違和感があり、ややこしくさせていますね。
とはいえ、他に相応しい呼び名も見つからないので、この名前で行くしかないのかもしれません。
また、dtb_classcategoryは別に存在する商品カテゴリとも名前がかぶってしまっています。
class_item とかにしたらいいような気もしますね。

と文句は付けましたが、EC-CUBEではこれらの4つのテーブルのおかげで、同一商品内にタイプや価格の違う商品を選択させることができるようになっています。
例えば色×サイズなどで何通りもの組み合わせを出すことができます。

 

ということで、Wardpress + WooCommerce環境にてこれらのテーブルを追加し、「規格」を追加できるようにしたいと思います。

 

 

追加したいテーブル

まず、EC-CUBEでは2種類の規格の組み合わせしかできませんでしたが、3種類欲しいときとかありそうです。
しかし、2種類を超えると組み合わせを表にしたときに2次元を超えてしまうため、全部を表示させるのが難しいですね。

それで、EC-CUBEにはなかった方法として「追加オプション」というスタイルをとるのはどうかと考えています。

例えば、同一商品内に「特別仕上げ」の商品も入っていた場合、特別仕上げは一定金額を追加するオプションとするわけです。
色×サイズ×特別仕上げかどうか という3次元の表ではなく、 色×サイズ+特別仕上げかどうか という2次元+追加オプションの表になるわけです。

これなら合理的ですね。

ということで、商品テーブルに加えて、特別オプションのテーブルも別途作ります。

 

Table: product
product_id int
name text
status smallint
start_date tinyint
end_date tinyint
note text
del_flg smallint

 

Table: product_class
product_class_id int
product_id int
class_item_id1 int
class_item_id2 int
class_item_id3 int
product_code text
stock int
stock_unlimited smallint
sale_limit int
num_set tinyint
price_normal int
price_sale int
deliv_fee int
del_flg smallint

 

 

Table: class
class_id int
name text
del_flg smallint

 

Table: class_item
class_item_id int
name text
class_id int
rank int
del_flg smallint

 

Table: option
option_id int
name text
del_flg smallint

 

Table: option_item
option_item_id int
name text
option_id int
rank int
price int
del_flg smallint

 

こんな感じで作っておけばいいかな。
多分、機能の追加に伴ってDBの項目も色々変えなければならなくなると思います。

例えば、オプションは複数選択可能かどうかでラジオボタンタイプとチェックボックスタイプの2種類を選べるようにしたりしたいですね。
行き当たりばったりで開発するので、こういう細かいことは後にしましょう。

 

ということで、次回はプラグインからDBにテーブルを増やす方法を調べてみます。

 

 

 

 

脱サラしペルーに移住。
仕事と趣味にのんびりと生きる。

投稿者: Jorge

脱サラしペルーに移住。 仕事と趣味にのんびりと生きる。

コメントを残す

メールアドレスが公開されることはありません。