すいません 😳 、とーっても記事のお題が長いですが、記事自体もけっこう長いです。
ですので、興味ない方はスルー大歓迎です〔笑)

さて、BuddyPress & s2member frameworkで作るプライベート会員制SNSを作って以来、いろいろ機能拡張のためイジってますが、今回やっとユーザのリクエストに答えられました。そう、フォーラム機能に画像添付を可能にすること。つまり、ユーザーが画像をトピにアップロードして貼れる機能です。
ということで、WP本家サイトとBP本家サイトを探しまくって、結局見つけたのがこのプラグインでした↓。

U Forum Attachment

機能的にはパーフェクトなんですが、気になるのがこれ。

このプラグイン、一年以上もずーっとアップデートされてません!

でもレビューが比較的良いので、モノは試しだ!ということで、インストールしてみたわけです。
じゃあ結果はというと?WP3.4.2 & BuddyPress1.6.2でなんとか動いてますねー。とりあえず、こんなもんで良いのかな?

。。。なんて思ってたら、ひとつだけ大事なことを忘れていたんですね。
そう、それが画像を保存するディレクトリーのプライベート化。というのも、画像保存先がuploadsディレクトリー内に設定されてあるからです。そして、またググルにググリまくり見つけたのがこれ

.htaccessファイルをちょっとイジって、アクセス制限する。
.htaccessファイルはWordPressをインストールして、パーマリンク設定時に作るファイルですね。s2memberをインストールすると、デフォルト設定にs2memberがちょっと設定を追加しますんで、こんな感じの内容になってるはず。

Options -Indexes
# BEGIN s2Member GZIP exclusions
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+
	RewriteRule .* - [E=no-gzip:1]
</IfModule>
# END s2Member GZIP exclusions

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

この中に新しい行を3行追加します。その内容は、これ。

RewriteCond %{REQUEST_URI} ^.*yourprivatemedia/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /wp-login.php?redirect_to=%{REQUEST_URI} [R,L]

最初の行にあるyourprivatemediaは、uploadsディレクトリーに内に設定したディレクトリー名に入れ替えないといけません。もし、uploadsディレクトリー全体をプライベート化したいのならuploadsを記入してOKだと思いますが、一般公開してあるブログ記事にアップした画像とかも弾かれる可能性があります。なので、uploadsディレクトリーに別ディレクトリーを作るのが無難かも。

ということで、出来あがった新.htaccessファイルはこんなカンジ。

Options -Indexes
# BEGIN s2Member GZIP exclusions
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+
	RewriteRule .* - [E=no-gzip:1]
</IfModule>
# END s2Member GZIP exclusions

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*yourprivatemedia/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /wp-login.php?redirect_to=%{REQUEST_URI} [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

この設定はつまり、設定したディレクトリーは未登録者からのアクセスが弾かれ、登録ページにリディレクトされるからくりです。

さて、ここで疑問に思う方もいるかと思います。
あれ?s2memberがアクセス制限してくれないの?
ってか、最初そう疑問に思ったのは私ですが。。。〔笑) :mrgreen:
s2memberでサイトをプライベート化するにあたって、ユーザが自由にダウンロードできるメディア設定も出来ます。でも、そのメディアの保存先はuploadsディレクトリーではないので、s2member上ではフォーラムの添付画像はアクセス制限できない仕組みになってるんですね。

とりあえず、いろんなディバイスからテストしてみて大丈夫みたいです。心配性で小心者な私 😳
ちょっとだけ「ホントに大丈夫なんかな~ 🙄 」っていう気持ちもありますので、もっと詳しい方がいらっしゃたら是非補足など頂けたら嬉しいですねー。
(って、そういうのはWPフォーラムに書くべきなんでしょうが。。。)

ってなわけで、久しぶりに自分用覚書でしたー 😛