ダウンロード販売用のプラグイン ~基本設計編~

突然ですが、ダウンロード販売用にちょうどいい WordPress のプラグインが無いので作りたいと思います。
そこで今回は基本設計をまとめていきます。

気軽にちょっと販売できたら色んなクリエイターの方も楽しく創作活動できるんじゃないかなと。そういう用途では WooCommerce などのプラグインは筋骨隆々で設定や準備がとても大変です。
柔軟性や拡張性は申し分ありませんが、思った販売ページを作るのに追加のプラグイン導入が必須だったりします。

では、はじめていきましょう!
(本当にこの文章を書いている時点では何も決めていません笑)

どんな機能が欲しいか?

まずは欲しい機能を列挙していきます。

ダウンロードを購入者だけに制限する機能

ダウンロード販売なので URL をしっているだけではダウンロードできないようにしなければなりません。
HTTP アクセスを拒否する設定をしたディレクトリに保管して管理し、ユーザ認証を通してダウンロードさせる機能です。

バリエーションを設定する機能

イラストなどの販売であればダウンロードできる上限サイズに対して金額を変えたりする機能があるといいですよね。
プログラムであれば使用範囲の違いでバリエーションがあったりします。(これを厳密にやるには認証機能なども必要になりますが、それは追々できればいいかなと)

決済通貨を切り替える機能

後回しになると思いますが、メインの通貨から設定した通貨への自動変換機能が欲しいです。

WooCommerce の追加プラグインで通貨変換のプラグインを使った時に凄く動作が重くて苦労したので、基本機能にしたいです。

カート機能

簡単な決済機能のつもりですが、複数の商品を買いたいときに一々決済するのは面倒です。

なので、カート機能は必須だと思っています。

予約購入する機能

リクエストに応じた受注生産などが可能なように予約購入 (前払い) できる機能があるとイラストレータさんなどは便利かなと思います。

複数購入で通常商品と予約商品が混在した時には即時送金処理 (すぐに Capture 処理) にしたいです。
内部的にはこの機能を付けておけば、発送する商品などを扱えるように簡単に拡張することもできるはずです。そのため、基本設計の段階で組み込んでおくとスマートかと思います。

通常投稿を有料記事化する機能

作成済みの記事の一部を有料化する機能も欲しいなと思っています。(優先度は低い)

ショートコードで囲った範囲を購入後しか見られないように制限するイメージです。
情報を売りたい場合もあると思うのでその対応です。

セールやクーポンを設定する機能

期間限定のセール機能や特定商品だけのクーポン、特定ユーザだけのクーポンなどを設定する機能も欲しいです。

これも実装が大変になるけど、後付けするのはもっと大変だと思うので基本設計に入れておきたいところです。

決済代行サービスとの連携機能

これがないとオンラインで完結するシステムとしては致命的ですので、当然はじめから組み込んでいきます。

PayPal と Stripe については、WordPress 用ではなく汎用的なラッパー class を作ってあるのでそれを応用します。
他には Amazon Pay もやりたいです。今、ドキュメントを読んでいるところです (笑)

購入者のユーザページ

購入品の管理 (確認と再ダウンロード) やユーザ情報の更新などを行うページです。
これも基本の機能であるので当然ほしいです。

どんなデータ構成で実現するか?

続いて、どんな構成でプラグインのデータを管理・実装していくか検討します。

商品はカスタム投稿タイプ

商品はカスタム投稿タイプを使って実装しておけば、一覧ページをアーカイブページとして実装できたり便利だとおもいます。
コメント機能を使ってレビューを投稿できるようにすると更に良さそうです。

商品の販売データは専用テーブルで管理

販売するデータは、DB 内に専用テーブルを作ってその中で管理するようにします。

データが画像の場合は自動で透かしを入れたサムネイルサイズの画像を自動生成するようにしたいです。このサムネイルは、通常のメディアライブラリに登録しておきます。

ユーザも専用テーブルで管理

ユーザも WordPress ユーザとは分けて管理したいところです。そのため、ユーザも専用テーブルを作成します。

メタデータ (メールアドレスやパスワード、名前などの基本情報以外の付加情報など) は WordPress のテーブル構造を参考に別テーブルで管理しておくと自由にキーを増やせて都合が良さそうです。

セール情報なども専用テーブルで管理

セールやクーポンの情報を保管するテーブルも専用で用意します。
条件はそんなに多くないのでテーブルのカラムを決めてしまった方がデータを取り出して管理するのが用意だと思います。

必要なカラムは、名称、割引金額、割引率、開始日時、終了日時、商品 ID、データ ID、ユーザ ID、最低合計金額、最低月間購入金額、最低年間購入金額、最低累計合計金額、クーポンコードくらいでしょうか。これらの中から必要な条件だけ設定して合致する行の割引を適応する形です。

複数一致する場合にどうするかは設定で選べるようにするか最大のものだけか悩みますね。

購入履歴と商品へのアクセス権限も専用テーブルで管理

これらも WordPress に丁度良いテーブルがないので専用で用意します。

アクセス権限はユーザのメタデータにしても良さそうですが、ちょっと目的が変わるので分けておこうと考えています。
購入履歴にメタデータは不要だと思うのでこちらは単一テーブルとします。(必要なら後で追加します)

WooCommerce みたいに購入履歴もカスタム投稿タイプにしてもいいですが、専用テーブルの方がスッキリするかなと思うのでテーブルを作成する方向で考えています。

管理画面でやりたいこと

管理画面で管理したいことをまとめます!

販売データのアップローダと一覧

販売するデータを HTTP (HTTPS) ではアクセスできないディレクトリにアップロードするアップローダが必要です。
画像であればアップロード時に透かしなどを入れた低解像度な画像をメディアライブラリに作成する機能も付けたいですね。

アップロードした販売データには必要な権限の設定や説明、管理画面専用のサムネイルなどを追加できるようにします。
権限は、複数登録できれば用途が広がると思います。例えば解像度ごとに S / M / L とイラレデータ AIというデータをアップロードしたときに、データ S には s, m, l ,ai という権限で、データ M には m, l ,ai で、データ L には l ,ai で、データ AI には ai でアクセス可能なように設定すれば販売時に ai 権限をユーザに付与すれば S ~ L と AI まですべてのデータがダウンロード可能になります。
これに加えてサブスク (実装するかは分かりませんが) 用の権限を付けておいたりするのも良さそうです。

※販売データそれぞれの個別の権限は自動付与します。(データ ID を使って permission-{$id} みたいにしようかなと思います)

商品管理と一覧

カスタム投稿タイプで商品を管理するので、商品ごとにカテゴリやタグなど (カスタムタクソノミー) も設定できるようにしておくと便利ですね。一覧にはサムネイルも追加しておきたいところです。

各商品の編集ページでは、以下を設定できるようにしたいです。

  • 商品名
  • 商品イメージの画像 (複数選択可)
  • 商品の詳細説明
  • 価格とバリエーション
  • 表示と非表示の切り替え
  • 備考
  • 抜粋

商品イメージは、WP のメディアライブラリから選択できるようにします。
商品の詳細説明は、投稿のエディタをそのまま使えばいいですね。

抜粋は、商品一覧ページで表示するための短い説明などを管理します。
一覧ページではショートコードを展開できるようにしておくと面白い使い方ができそうです。

価格とバリエーションでは、付加するアクセス権限と価格のセットを任意の個数で設定できるようにします。
販売データの例を使うと、バリエーション:高解像度では1,200円で l 権限を、中解像度では500円で m 権限を、低解像度では200円で s 権限を、AI データでは9,800円で ai 権限をという具合にアクセス権限に価格を付けるイメージです。

バリエーションごとに有効期限を日数か日付で設定できるようにしておくのも夢が広がります。(デフォルトは無制限)
販売可能数は基本的には無制限だと思いますが、予約販売 (受注販売) で使えるように設定できるように設計します。
(月ごとの上限とか設定できるとさらに良さそうだけど、実装メンドクサイ…)

特殊な権限として private みたいなのもあると良いかも?受注販売の時に買ってくれたユーザ限定みたいなヤツです。

権限はデータ名などで検索するか、直接入力すればリアルタイム検索で候補を絞るような機能が欲しいですね。

販売データの管理

販売データの管理と簡単な統計を表示するページも欲しいです。

販売データは、いつ、誰に、何が、いくらで売れたかを一覧で表示します。
商品の発送などはないのでこの時点で基本的には取引が完了しており編集することはまずないです。

予約販売 (受注販売) の販売データだけは、常に上の方に固定で表示させておきたいですね。
制作が完了したらデータを販売データの管理画面上から登録したら自動的にそのファイルにアクセスできるようになる感じが理想です。それと同時に送金処理 (Capture 処理) を行ってユーザから支払が行われる仕組みです。

あとは、直近の売上推移とか年月ごとの売上とかの統計データをグラフで表示させたいです。
ちょっと後回しになりそうですが、やはりデータが見れるとやる気が違います。あった方が絶対楽しいので面倒でもリッチに組み立てたいところです。

セールやクーポンの設定

セールやクーポンを一覧表示して登録・削除できるようにします。
各条件を指定して合致する場合にのみ適応させるようにします。

これはサイト内に一覧化する必要はないと思うのでただ列挙して管理するだけというイメージです。

ユーザの管理

WordPress ユーザとは別で管理したいと思うので、専用のページを用意します。

基本情報の他に購入回数や合計金額などを見れたらクーポン付与の参考になるかもしれません。あとはユーザの一時停止 (復活可) や追放処理 (メールアドレスだけ残して2度と登録できないようにする) を実装したいところです。

どうしてもマナーの悪いユーザは出てくるので、さっさとこちらの権限で全ての権利を停止させたいです。

あとは、個人情報保護のためにユーザからの要望に応じて、ユーザデータをメールアドレス含めて削除する機能も必要です。(ユーザが自身のページから削除でもいい)
※販売データ内ではユーザ ID で管理してユーザ情報は残さないことにする。

ユーザ登録は全て自動化したいので管理画面からの登録は実装しないつもりです。
(代行しないといけないようなユーザは、トラブルの元になりかねないため)

その他設定

その他の全体的な設定を行う画面も作りたいと思います。

デフォルト値の変更だったり動作の変更などを管理します。

正直、ここは全く見えていません(笑)
作りながら動作を変えたい場所が出てきたら随時設定に追加する感じでいければと思っています。

まとめ

以上、ダウンロード販売用のプラグインの基本設計でした。文字しかない記事でスミマセン……。

書き出してみるとやること多すぎてもう嫌になってます(笑)
でもこれができたら色々楽しそうじゃないですか?頑張ります!

もっと気軽に作るつもりだったんですが、あれもこれもと考えるとやはりこうなりますね。。
全ての機能を作り込むことはできないので基本的な部分から組んでいって、残りの機能はあとから変更・追加できるように考えながら組んでいきたいと思います。

たぶん、無料のプラグインとして公開するのでその際はぜひご利用下さい。

その他、こんな機能があったらいいかも!などのご意見もお待ちしております。実装するかは別としてとても参考になるのでお気軽にコメントいただければと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)