buddypress + buddypress activity plus + amazon s3 uploads
buddypress + buddypress activity plus + amazon s3 uploads
最近buddypressでsnsを構築中なのだが、ユーザーに画像を頻繁に投稿してもらうようなsnsになるため、
画像はs3で保存したいと思っている。
そこでそんな感じのプラグインないかなーと探していたのだがいい感じのが見つからなかった。
(むしろそんなプラグイン作ってくれという案件がfreelancer.comとかに結構あった)
とりあえず表題のプラグインで画像をすべてs3に持っていけるように奮闘中。
ここに似たようなことをやろうとしている人の投稿があった。
activity plus and amazon s3 upload amazon plugin working together
- BuddyPress.org
- BuddyPress Activity Plus – WordPress plugin | WordPress.org
- Amazon S3 Uploads – WordPress plugin | WordPress.org
インストール
単純にアクティベートしたところ、amazon s3 uploadsのcronが走るといくつかの画像が見れなくなってしまった。
見れるのはentryの中身だけだった。
しかも、もともとサムネイルが表示されていたところに元画像が表示されてしまい、フィードがぐちゃぐちゃ。
サムネイル画像の復活
とりあえずこれだけは直した。以下そのやり方。
問題はamazon s3 uploadsプラグインがローカルの画像をs3にアップロードする際にローカルからファイルを消しており(←当然の処置)、
表示部分のbuddypress activity plusがローカルに画像ファイルがない場合は元画像を表示するような仕組み(←納得の処置)になっているからだと思われる。
そこでbuddypress activity plusの表示部分でローカルにファイルがあるか確認する部分を削った(←き、汚い)。
plugins/buddypress-activity-plus/lib/forms/images_tag_template.php 9行目
$thumbnail = bpfb_get_image_url($activity_blog_id) . $info['filename'] . '-bpfbt.' . strtolower($info['extension']);
?>とっても汚いことをやってると思いつつ他にやり方もわからず。。。
$thumbnail =以下を関数にしてadd_actionに入れておいて、
amazon-s3-uploadsプラグインが動いているときだけfilter_actionとかつけてローカルのファイル存在確認をさせないようにすればいいのかな?うーん。wordpressの知識がなさ過ぎる。
プラグインをいじる上でいいwordpress本とかないのかな?まだアバター画像が消えるといった問題もあるので改良したら追記しよう。
6/12追記
bp group documentsというプラグインを使っているのだが、こちらも画像が上がっていなかったことが判明。これは割りと簡単に解決できて、wp-content/plugins/buddypress-group-documents/index.phpの428行目近辺で使っている
BP_Group_Documentsオブジェクトのget_url()関数に引数でfalseを渡してあげると、
内部でファイルの存在チェックを行わなくなるのでS3上の画像が表示されるようになる。また、アバター画像が表示されない件は、wp-content/plugins/buddypress/bp-core/bp-core-avatars.phpの
bp_core_fetch_avatar関数をみると、ファイル名等をメタデータで持たずディレクトリ内にサムネイルとフルの2つの画像だけにして
どちらかを判断して出力するような仕組みになっており、画像がアップロードされてなくなると変わりにgravatarがでてきてしまう。かといってファイルをサイズ0とかにして残すとローカルのファイルを読みにいってしまう。
どうしたもんか。6/18さらに追記
avatarは仕方がないのでS3にアップロードしないことにした。amazon-s3-uploadsのasssu-models.phpの191行目付近を
ディレクトリ名にavatarを含んでいない場合というif文でくくった。