bbPressの自作テーマで検索結果画面を作る方法

Web制作 |

このシリーズでは、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を作る

最初に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.phploop-search-topic.phploop-search-reply.phpのファイルが適用されます。

例えば「りんご」という単語で検索をかけた時、「りんご」がタイトルに含まれるフォーラムがあればloop-search-forum.phpが表示され、「りんご」がタイトルに含まれるトピックがあればloop-search-topic.phpが表示されます。

検索結果が表示されないトラブル

ハマりポイントその2。検索窓にキーワードを入力して検索ボタンを押した時、検索結果が表示されずになぜかトップページの内容が表示されることがあります。

既知のトラブルとして公式にも説明があります。このバグ自体はまだ存在するようですが、一応解決策も載っていました。

トラブルシューティング

フォーラム検索のカスタムスラッグにスペースが入っていないか?

管理画面の「設定 > フォーラム」で設定できます。デフォルトではsearchになっています。もしスペースが入ったスラッグに変えていたなら、スペースを除きます。

フォーラムルートスラッグを表示するにチェックを入れる

こちらも管理画面の「設定 > フォーラム」で設定できます。デフォルトではチェックが入っているはずですが、もしチェックを外していた場合はもう一度チェックを入れてみます。

フォーラム検索のカスタムスラッグをデフォルト以外にする

デフォルトのsearchではなく、forum-searchなどに変えてみます。

ちなみに私は全て試しましたが解決しませんでした。これでも解決しなければ、一般的なWordPressのトラブルシューティングを試します。

一般的なトラブルシューティングとは、

  • プラグインを一度全てOFFにして、問題が解決するかどうかを試す
  • テーマをTwentyTwelveなどデフォルトの物に変更して、問題が解決するかどうかを試す

私の場合はTwentyTwelveに変更したところ検索結果が表示されるようになったので、テーマに問題があることが分かりました。

おわりに

bbPressは高機能な掲示板を簡単に作れて便利ですが、トラブルにハマると厄介ですね。

そのような場合は公式のフォーラムで質問もできます。(英語ですが)

他の部分のカスタマイズについてはまた次回。


執筆者

Yulius

ホームページ制作、多言語サイト制作のご依頼を承っています。お気軽にご相談ください。

お見積もりご依頼