とりあえず方法が一つ見つかったので備忘録がてら記しておく。
クライアントからの要件はこうだ。
- 一般消費者向けに製品のプロモーションサイトを作りたい
- 購入ユーザー向けのメンバーオンリーページを持たせたい(要認証)
- メンバーIDとパスワードは個別ユーザーで管理したい
- お知らせなどは自分達で更新して行きたい
ざっくりと こんな要件だったので、特に4を考えるとCMSの採用は必須だろうという話になった。Wordpressを使えば3はクリア出来る。デザイナーが絡むので1も全く問題無い。問題は2のアクセス制限である。IDを個別に発行すると言う時点でベーシック認証は却下となった。なぜなら一般のユーザーにベーシック認証の管理は難しいからだ。それに複数のIDを発行する事はレンタルサーバでは出来ないだろう。WordPressには記事毎にパスワードを設定する機能が実装されているが、ページ単位(カテゴリー)でアクセス制限をかけるという概念は無いはず。プラグインでなんとかなるのだろうか?
色々調べてみたところ、WordPress全体にアクセス制限をかけるプラグインが有る事が分かった。仕組みは単純でクッキーを診断してWPにログインしてなければログインページにリダイレクトさせるというプラグインだった。(Angsuman’s Authenticated WordPress Plugin – Password Protection for Your WordPress Blog) DLしてみると非常にシンプルなPHPのコードが書かれたプラグインだった。
参考になったのはこちらのサイト。上記Plug-inのソースコードの不具合修正案も記してくれている。
WordPressのブログ全体に認証をかける – satake7’s memo
更に課題が出てきた。3のID管理だがこの場合WPの機能を使えないのではないだろうか?閲覧権限を持たせたユーザーを作ることは出来るが、特定ページだけに認証をかけるなんて・・
しかしこの課題はアイディアでなんとかなるものである。一般用サイトとメンバー用サイトのWP二本立てにすれば解決できるのだ。WPにはマルチブログ機能が無いので(Wordpress MUは別として)、WP本体を2つインストールする必要性がある。しかしWPは大きなアプリケーションでは無いので容量などは気にならないレベルである。メンバー用サイトには上記のサイト全体にWPログインチェックのプラグインを入れておけば、WPの機能を使ってメンバーの管理が出来る。独自にメンバー管理機能を考える必要は無い。別々のシステムだと考えればセキュリティ面でもメリットがありそうだ。
後は運用面でカバーという事になりそうだが一つ問題点に気付いたというか、クリアしておきたい課題に気付いた。Themeの共有である。今回はWPを2つ使う訳だが見た目を統一する為にThemeは一緒の物を使いたいのだ。例えばコーポレートロゴの変更とかで画像を差し替えた場合は確実に2つのWPシステムのThemeを更新しなくてはならない。運用面を考えると将来的にトラブルの元になる原因はクリアしておきたい。
WordpressのThemesフォルダを一元管理するようなプラグインは無いだろうか?
もしくは作れないだろうか?WPのバージョンアップを考慮すると本体のコードはいじりたくない。
しばらく悪戦苦闘したのだが、結局プラグインで解決する方法は失敗したというか断念した。WPが参照している変数や関数自体がどうしてもベースURLを元にしているからプラグインでは解決出来ないという事になった。もはや付け焼き刃では無理だ。この課題をクリアするには根本的にWPの構造を理解していなければ無理だろう。WPを隅々まで理解している人が答えを導き出してくれるのを待つしかない。
そこで考え方を変えることにしたというか開き直った。私は俗に言うインフラ屋である。この方法は真っ先に思いついていたのだがレンタルサーバでは出来ないと思っていたのでプラグイン案を検討した。ところがレンタルサーバでも選べば可能だと言うのである。サーバーのシンボリックリンクなら解決出来るだろうという発想だ。凄く簡単な解決方法である。
要するに主となるWP側のThemesフォルダで一元管理し、従となるWP側のThemesフォルダは主となるWPのThemesフォルダのシンボリックリンクにしてしまうのだ。サーバーのシンボリックリンク機能を使えばアッサリ解決する事が確認できた。(自前のLinuxサーバで検証済み)。レンタルサーバがシンボリックリンクを提供していれば容易に解決出来るだろう。その代わり使うレンタルサーバを吟味しなくてはならない。
シンボリックリンクの張り方を記しておくので上の私の説明がダメでもやっている事が分かれば理解出来るだろう。
$ pwd
/home/sasapurin/public_html
$ ls
wordpress1 wordpress2 index.php
$ cd wordpress2/wp-content/
$ ls
languages plugins themes index.php
$ mv themes themes_bk
$ ls
languages plugins themes_bk index.php
$ ln -s /home/sasapurin/public_html/wordpress1/wp-content/themes themes
$ ls
languages plugins themes themes_bk index.php


コメント