【bbpress】トピック作成フォームに独自項目をカスタムフィールドで追加する方法

こんにちは、ゾノ( @ozonosho )です。
今回の記事ではwordpressの掲示板プラグイン「bbpress」においてトピック作成フォームに独自項目をカスタムフィールドで追加する方法をご紹介します。
bbpressは掲示板を作成するプラグインとして非常に優秀ではあるのですが、トピック作成フォームに「タイトル」「本文」の2つしか入力項目が用意されていないため使いづらいことがあります。
論より証拠!
僕が実際に制作依頼を受けた「さくナビ」のサイトを例に解説していきます。
実際の利用場面
まずはbbpressの標準機能でつくれるトピック作成フォームを見てみましょう。

bbpressの標準機能だと上図のように「タイトル」「本文」の2項目しか投稿できません。
しかし、例えばイベント情報の掲示板を作成したい場合「タイトル」「本文」の他にも「開催日時」や「会場」など複数の項目を用意できたほうが親切だと思います。
このような要望を受けて実際にさくナビのサイトに実装したトピック作成フォームがこちら!

上図を見ていただくと分かるとおり「カテゴリー」や「開催日時」など独自の項目を追加しています。
もちろん出力にもバッチリ対応。
下のトピック表示ページを見ていただくと分かるとおり、入力された項目ごとに値を表示することができます。

今回ご紹介するbbpressカスタマイズを実装すればこのように用途に合わせた掲示板を作成することができるようになります。
それでは実装方法を見ていきましょう!
実装方法
実装は下記の3段階でおこないます。
- トピック作成フォームに独自項目を追加する
- 入力された独自項目の値を保存する
- 保存した値を出力する
それぞれ見ていきましょう。
①トピック作成フォームに独自項目を追加する
トピック作成フォームに独自項目を追加するには、function.phpに下記のような関数を用意してください。
add_action ( 'bbp_theme_before_topic_form_content', 'bbp_extra_fields');
function bbp_extra_fields() {
$html = "";
//テキスト項目
$html .= '<input name="input_name" type="text" value="">';
//テキストボックス項目
$html .= '<textarea name="textarea_name" cols=10></textarea>';
echo $html;
}
ここではただ入力用の箱を作っているだけなので、inputタグやtextareaタグやselectタグなどを自由に設定していただいて大丈夫です。
重要なのは「add_action」でこの関数をbbpressのトピック作成フォーム部分に呼び出している点です。これにより、この関数で用意した入力項目がフォームに表示されます。
②入力された独自項目の値を保存する
ユーザーがトピック作成フォームで入力した独自項目の値を保存するには、function.phpに下記のような関数を用意してください。
add_action ( 'bbp_new_topic', 'bbp_save_extra_fields', 10, 1 );
add_action ( 'bbp_edit_topic', 'bbp_save_extra_fields', 10, 1 );
function bbp_save_extra_fields($topic_id = 0) {
if (isset($_POST) && $_POST['input_name']!='') {
//テキスト項目の保存
update_post_meta( $topic_id, 'input_name', $_POST['input_name'] );
}
if (isset($_POST) && $_POST['textarea_name']!='')
//テキストボックス項目の保存
update_post_meta( $topic_id, 'textarea_name', $_POST['textarea_name'] );
}
}
※「’input_name’」「’textarea_name’」の部分の名称は①で自分が設定した入力項目と揃えてください
ユーザーが入力した独自項目の値を保存するには「update_post_meta」を利用します。カスタムフィールドと同じように、投稿(ここではトピック)ごとに特定の項目の値を保存することができます。
この保存用の関数を「add_action」でトピック作成時に呼び出すことで、元々bbpressに用意されている「タイトル」「本文」が保存されるタイミングで一緒に独自項目も保存するようにしています。
③保存した値を出力する
保存した独自項目の値をトピック表示ページに出力するには、single-topic.php内の出力したい箇所に下記のような記述をしてください。
//テキスト項目の値の出力 echo get_post_meta(bbp_get_topic_id(), 'input_name', true); //テキストボックス項目の値の出力 echo get_post_meta(bbp_get_topic_id(), 'textarea_name', true);
※「’input_name’」「’textarea_name’」の部分の名称は①で自分が設定した入力項目と揃えてください
保存された値はカスタムフィールドの値と同じように「get_post_meta」で出力することができます!
おわりに
以上、今回の記事ではwordpressの掲示板プラグイン「bbpress」においてトピック作成フォームに独自項目をカスタムフィールドで追加する方法を紹介させていただきました。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。









