- 2009-05-09 (土) 16:36
- blog

無事導入できたbbpresws、次はこれを通常のwordpress同様にカスタムしていく方法を見ていく。
wordpressとbbpressの完全な統合
前回やった連携・統合というのは、ログインとユーザー情報を共有させる基本的なものだった。
けどwordpress及びbbpressを利用してあれこれ作りたい人にとって本来欲しい統合とは、テンプレートタグやAPIの統合だったんじゃないだろうか。
wordpressで作ったサイト内の1コンテンツとして、bbpressを利用したforumsがあり、それら全てのコンテンツで共通したヘッダーやフッダーが表示される、そこにはグローバルメニューがあり、メニューはwordpressのテンプレートタグからカテゴリーリストを取得している…みたいな。
俺も以前いじった時はそれがやりたくて、あれこれ調べた結果、以下の記事に載っている方法でそれを再現する事が出来た。
integratePress – Part I | Aditya Naik
これを利用すると何が出来たか、それはbbpressのテーマファイルからwordpressのテンプレートタグを利用できるようになったのだ。
なのでbbpressのテンプレートからwp_head()を利用してheader.phpを呼び出したりとかも可能だった。
しかしこれ、既に現在のヴァージョンでは使う事が出来ない。
俺が試した時は確かwordpress2.5x、bbpressが0.9xだった頃だったが、wp2.6そして2.7にいたるまでに肝心のcookieの仕様等あれこれ変わったせいなのか、使えなくなってしまったみたい。
うーんまいったなぁと思ってたら、あれ公式のDocumentationに載ってた!
bbPress » Integration with WordPress
bbPress will not have access to WordPress’ functions unless you manually tell bbPress to load WordPress first. This integration step is also known as “deep” integration, it is a totally optional part of integration and is not required to get shared cookies and logins working. In order to do it, you need to put require_once(‘path/to/wp-blog-header.php’); in bbPress’ bb-config.php (wp-blog-header is in the same directory as WordPress’ wp-config.php file).
bb-config.phpにrequire_once('フルパス/wp-blog-header.php');を加えるだけで、wordpressのテンプレートタグが使えるように!(この際日本語化に支障が出るが、詳しくは後述)
けどDocumentationには、重くなるからplugin使ったほうがいいよとある…のだが、pluginを探してみるも一体どれがその役目を果たすものなのか見つけられなかったので、とりあえずこの方法でやる事に。
テスト環境だと特に重さは感じられないので、問題なさそうだけど。
bbpressのテーマ
テーマの位置
bbpressはwordpressと同様にbbpress独自のテーマ・テンプレートがあり、それをあれこれする事でデザインを変更する事が出来る。
bbpressのディレクトリ内のbb-templatesフォルダが、wordpressのthemesにあたる。
…と本来これで終了なのだが、bbpressではbb-templatesはコアファイル(?)に含まれるらしく、ヴァージョンアップの際上書きされる可能性が一応ある。
なのでbbpressのテーマを作る際は、bbpressのディレクトリ直下にmy-templatesという名前のフォルダを作り、ここに自分で作成するテーマを入れていく形になる。
(同様にpluginもmy-pluginsフォルダを作って管理する事が出来る)
テーマを構成するファイルの種類
日本語の革命から取ったと思われるKakumeiというデフォルトテーマを良く読めば、一応どのように作るかは把握出来る。
テーマについての情報を管理画面に表示するために最低限必要なものは以下のとおり。
- style.css
- 300×225のscreenshot.png
wordpressと同じく、テーマの情報はstyle.cssの最初の部分にコメントとして以下の形式で記述。
/*
Theme Name:[テーマの名称]
Theme URI: [テーマのURI]
Description: [テーマの説明]
Version: [テーマのバージョン]
Author: [テーマの制作者]
Author URI: [テーマの制作者のURI]
[コメントやライセンスなど]
*/
wordpressでは上記に加えindex.phpが必要だったが、bbpressではindex.phpもそれに相当するテンプレートファイルも見当たらない。
bbpressでは必要なテンプレートファイルがない場合、デフォルトテーマであるKakumeiから該当部分のみ読み込むようになっている。
また公式サイトによると以下のテンプレートファイルが存在するとの事。
- front-page.php
- フロントページ、つまりbbpressのトップページにあたる。
- forum.php
- フォーラムの表示、ここに表示中のフォーラムに属するトピックが一覧表示される。
- edit-post.php
- 既に投稿したコメントを編集する画面。
- edit-form.php
- bbpress用関数
edit_form()で呼び出される、編集フォーム。edit-post.phpから呼び出されている。 - favorites.php
- ユーザー情報の“お気に入り”ページのテンプレート。
- header.php
- その名の通り、ヘッダー。
bb_get_header()で呼び出される。 - footer.php
- その名の通り、フッター。
bb_get_footer()で呼び出される。 - login.php
- ログインページのテンプレート。/bb-login.phpがそれにあたる。
- login-form.php
- bbpress用関数
login_form()で、ユーザーがログインしてない場合、呼び出される。デフォルトテーマKakumeiではヘッダー部分で呼び出している。 - logged-in.php
- bbpress用関数
login_form()で、ユーザーがログインしている場合、呼び出される。 - password-reset.php
- /bb-login.phpからパスワードの回復を行った場合の結果を表示する画面。ここでユーザー名を送ると登録してあるメアドにパスワードリセット用URIが送られ、そのアドレスへ移動するとメアドに新しいパスワードを送ってくれる機能。このpassword-reset.phpはメール送りましたよ!って通知とパスワード新しく設定したよ!って通知の際に表示される。
- post-form.php
- フォーラムやトピックを新しく追加する際に呼び出されるフォーム。bbpress用関数
post_form()で呼び出される。 - post.php
- bbpress用関数
bb_post_template()で呼び出される。投稿を表示するためのテンプレートでループ中に呼び出される。 - profile.php
- ユーザーページのテンプレート。
- profile-edit.php
- ユーザーページの編集画面のテンプレート。
- profile-base.php
- プラグインでユーザーページに追加されたページがあった場合のページテンプレート。
- register.php
- ユーザー登録画面用テンプレート。
- register-success.php
- ユーザー登録に成功した旨を知らせるページ用テンプレート。
- search.php
- 検索結果表示用テンプレート。
- search-form.php
- bbpress用関数
search_form()で呼び出される。検索フォームのテンプレート。デフォルトテーマKakumeiではヘッダー部分で呼び出している。 - stats.php
- 人気の記事や現在の登録ユーザー数等を表示するstatistics.php用テンプレート。デフォルトテーマKakumeiではどこからもリンクされていない。
- topic.php
- トピックを表示するテンプレート。
- topic-tags.php
- bbpress用関数
topic_tags()で呼び出される。表示中のトピックのタグと、追加削除用フォームを呼び出す。 - tag-form.php
Called by tags_form().
と公式サイトにあるが、少なくとも1.0にはそんな関数もなければ、tag-form.phpもデフォルトテンプレート内に存在しない。またコアファイル内のどこにもtag-form.phpに関する関連付けがないので、作った所で何も機能しない。
これはおそらく誤表記で正確にはtag_form()だと思われるが、これはコアファイル内の関数1でhtmlを出力しているので、結局テンプレートを作っても置き換えてはくれないぽい。- tags.php
- タグ一覧ページ表示用テンプレート。よく使われるタグ一覧を見れる。
- tag-single.php
- あるタグに属するトピックの一覧・そのタグに属するトピックの作成フォーム・タグ編集フォームが表示される画面のテンプレート。アドレスはtags.phpと一緒だが、こちらは引数でタグ名を渡すと表示される。
- view.php
- ログインしている時のみ表示される「返信の無いトピック」や「タグの無いトピック」といった一覧を表示するためのテンプレート。ログインしている時のみ、というのは単にテンプレートでログインしてるかで分岐させているだけなので、元々そういう機能が備わっているワケではない。
bbPress » Themes and Templates
また、これ以外にもデフォルトテーマ内には以下のテンプレートが存在した。
- 404.php
- 見てのとおり、404が帰ってきた時に表示するページ用テンプレート…のはずだがまったく機能しているように見えない。2
- rss2.php
- RSS2用テンプレート。
- style-rtl.css
- サブcss。デフォルトテーマのひとつKakumei-blueでも利用されているようだ。
さらに、デフォルトテーマにはないが以下のファイルを自分で作ればテ-マファイルの一部と認識してくれるようだ。
- functions.php
- wordpressと同じ、テーマで使用する関数を書いておくものだろう。
見てのとおり、bbpressはwordpressよりテンプレート数が膨大なのが結構大変だったりする。
先のwordpressのテンプレートタグを使える方法をとったなら、header.php等共通化できる部分はしてしまったほうが作業量が減るケースがあるかもしれない。
ただしwordpress本体のアップグレードによるなんらかの変更でbbpressとの統合が解けてしまう可能性もある、wordpressをアップデートしていく意思があるなら極力テンプレートは別にしておき、wordpressのテンプレートタグを利用するのは最小限にしたほうが被害は少ないだろう。
また、テーマフォルダにない場合デフォルトのテーマから流用するので、流用されても問題のないものは製作必須ではない。(rss2.phpやstyle-rtl.cssは多くの場合いじる必要がないだろう)
テンプレートタグ
bbpressのテンプレートタグがまとまっているサイトを俺は知らないけれど、多くのテンプレートタグは/bb-includes/functions.bb-template.phpにまとまっているので、デフォルトテーマの中身とつき合わせていけば大体把握できる。(もちろんある程度phpはわからないとだめだけど)
注意するべきはループのまわし方やConditional Tagの違いかなぁ。
wordpressとの統合やbbpressの設定の調整
bbpressのパーマリンクの変更
bbpressの管理画面でパーマリンク設定を変更してもリンクが修正されず、wordpressの404画面に飛ばされる。
bbpressではwordpressのように自動で.htaccessを作成してくれないからのようだ。
この場合管理画面のパーマリンク設定部分の下の説明にあるprovided hereというテキストリンクから表示されるテキストを.htaccessという名前で保存し、bbpressのディレクトリにアップロードすればOK。
リダイレクト
ログインしてない場合のリダイレクト
bbpressのテーマのほうにfunctions.phpをつくり以下の内容を書く。
<?php
if ( !bb_is_user_logged_in() ) auth_redirect();
?>
bbpressにはフィルターフックやアクションフックが提供されていないのでどうしたもんかなと思っていたが、functions.phpは他のテンプレートより先に読み込まれて実行されるので、関数でラップしなければ普通に実行してくれるようだ。
リダイレクト関数を利用してるんで、普通にリダイレクトする時と同じく出力が先にくるとエラーが出そうだから(試してない)functions.phpの最初に書くほうがいいかも。
日本語リソースの引用修正
既に少し触れたが、wordpressとの完全な統合のためにbb-config.phpでwp-blog-header.phpを読み込んでいると、bbpressの日本語リソースの参照先が変わってしまうので、bbpressの大部分の箇所が英語に戻ってしまっているはずだ。
一部日本語に翻訳されたままの部分もあるが、これはworpdressと共通の語句が翻訳されているだけにすぎない。
つまり、この時bbpressはwordpressの日本語リソースを読んでいる事になる。
これへの対処方法はbb-config.phpのwordpressのwp-blog-header.phpを読み込む処理の後でload_textdomain関数を実行する。
/* wordpressとの統合 */
require_once('wordpressまでのフルパス/wp-blog-header.php');
/* bbpressの日本語リソース読み込み */
load_textdomain('default', 'bbpressまでのフルパス/my-languages/ja.mo');
この二つをbb-config.phpの一番最後の部分に追加してやれば、wordpressのテンプレートタグが使えて日本語化されているbbpressが完成する。
関連するかもしれない他の記事
- Newer: wordpressで非公開コミュニティサイトを作る(7)feedのカスタマイズ2(失敗)
- Older: wordpressで非公開コミュニティサイトを作る(5) bbpress1.0αのインストール
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://weblog.atl-r.net/blog/tipstomake_communitysite6/trackback/
- Listed below are links to weblogs that reference
- wordpressで非公開コミュニティサイトを作る(6) bbpress1.0αのテーマカスタマイズ from atl*weblog
