このシリーズでは、WordPressの掲示板プラグインであるbbPressを、自作テーマでカスタマイズする方法をお届けします。
今回は検索画面の作成についてです。
bbPress自作テーマの基礎編については、前回の記事をご覧ください。
検索機能を作る際に、いくつかハマりポイントもあったので、随時解説していきます。
まず、検索窓を作ります。
検索窓そのものは、form-search.phpというファイルです。デフォルトではこんな風に書いてあると思います。フォームの見栄えはHTML/CSSで自由にスタイリングしましょう。
<div class="bbp-search-form">
<form role="search" method="get" id="bbp-search-form">
<div>
<label class="screen-reader-text hidden" for="bbp_search"><?php esc_html_e( 'Search for:', 'bbpress' ); ?></label>
<input type="hidden" name="action" value="bbp-search-request" />
<input type="text" value="<?php bbp_search_terms(); ?>" name="bbp_search" id="bbp_search" />
<input class="button" type="submit" id="bbp_search_submit" value="<?php esc_attr_e( 'Search', 'bbpress' ); ?>" />
</div>
</form>
</div>
検索窓を設置したい場所に次の1行を書くだけ。
<?php bbp_get_template_part( 'form', 'search' ); ?>
検索結果画面のファイル構造は次の通りです。
page-forum-search.php // 検索結果画面トップ
content-search.php // 検索結果画面の中身
loop-search.php // 検索結果の繰り返し開始
loop-search-forum.php //検索されたフォーラム単体
loop-search-topic.php //検索されたトピック単体
loop-search-reply.php //検索された返信単体
実際の画面上で言うとこのようになってます。
最初にpage-forum-search.phpを作ります。
ハマりポイントその1は、デフォルトでプラグインに入っているテーマの中にこのファイルが存在しないこと。他のページは揃っているので、このページだけ入れ忘れちゃったんでしょうか……。
とにかくpage-forum-search.phpがないと検索結果は表示されないので、ファイルを作成します。ファイルの中はこんな感じで記述します。
すでに作った他のファイル(archive-forum.phpなど)のソースをコピペしてきて、中身だけ下記に入れ替えると楽です。
<?php if ( bbp_has_search_results() ) : ?>
<?php bbp_get_template_part( 'pagination', 'search' ); ?>
<?php bbp_get_template_part( 'content', 'search' ); ?>
<?php bbp_get_template_part( 'pagination', 'search' ); ?>
<?php elseif ( bbp_get_search_terms() ) : ?>
<?php bbp_get_template_part( 'feedback', 'no-search' ); ?>
<?php else : ?>
<?php bbp_get_template_part( 'pagination', 'search' ); ?>
<?php bbp_get_template_part( 'content', 'search' ); ?>
<?php endif; ?>
上記がごちゃごちゃして余計だと思ったら、↓だけでも検索結果は表示できます。
<?php bbp_get_template_part( 'content', 'search' ); ?>
検索できる対象には、フォーラム、トピック、返信があります。
検索対象によって、それぞれloop-search-forum.php、loop-search-topic.php、loop-search-reply.phpのファイルが適用されます。
例えば「りんご」という単語で検索をかけた時、「りんご」がタイトルに含まれるフォーラムがあればloop-search-forum.phpが表示され、「りんご」がタイトルに含まれるトピックがあればloop-search-topic.phpが表示されます。
ハマりポイントその2。検索窓にキーワードを入力して検索ボタンを押した時、検索結果が表示されずになぜかトップページの内容が表示されることがあります。
既知のトラブルとして公式にも説明があります。このバグ自体はまだ存在するようですが、一応解決策も載っていました。
管理画面の「設定 > フォーラム」で設定できます。デフォルトではsearchになっています。もしスペースが入ったスラッグに変えていたなら、スペースを除きます。
こちらも管理画面の「設定 > フォーラム」で設定できます。デフォルトではチェックが入っているはずですが、もしチェックを外していた場合はもう一度チェックを入れてみます。
デフォルトのsearchではなく、forum-searchなどに変えてみます。
ちなみに私は全て試しましたが解決しませんでした。これでも解決しなければ、一般的なWordPressのトラブルシューティングを試します。
一般的なトラブルシューティングとは、
私の場合はTwentyTwelveに変更したところ検索結果が表示されるようになったので、テーマに問題があることが分かりました。
bbPressは高機能な掲示板を簡単に作れて便利ですが、トラブルにハマると厄介ですね。
そのような場合は公式のフォーラムで質問もできます。(英語ですが)
他の部分のカスタマイズについてはまた次回。