前提・実現したいこと
bbpressというプラグインを使っているのですが、ユーザがあるフォーラム内にいて(見ていて)、そこにある検索フォームでトピックを検索したときに、そのフォーラムのみに存在しているトピックのみを表示したいです。
具体的には、
Forum Top
|
|
|------------------------------|
|- Forum B |- Forum C
|
|-----------|
|topic A |-topic F |-topic A |-topic Z (Forum Cの直下にこのtopic A,Zがあります)
現在ユーザがForum Bにいるとして、そこからtopic Aを検索したとき、Forum Bのtopic Aを表示します。Forum Cのtopic Aは表示しません。
発生している問題・エラーメッセージ
普通の検索結果のみが出力される、または、何も出力されない。検索結果を変えるフィルターの問題以前に、検索フォームで送信した値(name="s"とvalue="<?php echo $forum_id; ?>"が取得できないのでここに問題がある気がします。echo で出力を試みたのですが、何も出力されませんでした。どうすれば目的の機能を果たせるでしょうか。
試したこと
試したことは2つあります。
1つ目は、このサイトを参考に作りました。https://sevenspark.com/tutorials/how-to-search-a-single-forum-with-bbpress
まず下記のコードをchildテーマのfuncton.phpに加えます。
ここでは、トピック一覧が表示されているところに検索フォームを出現させています。先の具体例のtopicの手前、Forum B と Forum Cに検索フォームが現れます。
function my_bbp_search_form(){ ?> <div class="bbp-search-form"> <?php bbp_get_template_part( 'form', 'search' ); ?> </div> <?php } add_action( 'bbp_template_before_single_forum', 'my_bbp_search_form' );
次に、下記のコードをform-search.phpに上書きします。forum-search.phpでは検索フォームの機能を担っています。
<?php if ( bbp_allow_search() ) : ?> <?php $forum_id = bbp_get_forum_id(); //ここでトピックの親フォーラムを取得します?> <div class="bbp-search-form"> <form role="search" id="bbp-search-form" method="get" action="<?php bbp_search_url(); ?>"> <input type="text" value="" placeholder="Search <?php the_title(); ?> Topics" name="s"/> <input type="hidden" name="forum_id" value="<?php echo $forum_id; ?>"/> <input type="submit"/> </form> </div>
最後に下記のコードをfunction.phpに加えます。ここで検索結果の条件付けを行っています。
<?php function my_bbp_filter_search_results( $r ){ $s=htmlspecialchars($_GET['s'], ENT_QUOTES, 'UTF-8'); $forum_id = htmlspecialchars($_GET['forum_id'], ENT_QUOTES, 'UTF-8'); if(isset($s)){ $args=array( 's'->$s, 'post_parent'->$forum_id ); } return $r; } add_filter( 'bbp_before_has_search_results_parse_args' , 'my_bbp_filter_search_results' ); ?>
2つ目は、このサイトを参考にしました。https://gist.github.com/BoweFrankema/4207064
下記のコードをmy_bbp_filter_search_results()に書き直してみました。しかしダメでした。
if(bbp_has_topics(array('s'->$s, 'post_parent'->$forum_id))) bbp_get_template_part('bbpress/loop', 'topics');
また、検索結果の表示を作ってしまおうと思い、forum-search.phpのactionを""(空)にして、送信先を自分に戻ってくるようにして、下記のコードを加えてもみました。
$s=htmlspecialchars($_GET['s'], ENT_QUOTES, 'UTF-8'); $forum_id = htmlspecialchars($_GET['forum_id'], ENT_QUOTES, 'UTF-8'); if(isset($s)){ $args=array( 's'->$s, 'post_parent'->$forum_id ); $the_query=new WP_Query($args);?> <?php if($the_query->bbp_has_topics()):?> <?php while($the_query->bbp_has_topics()): $the_query->bbp_the_topic();?> <?php bbp_get_template_part( 'loop', 'single-topic' ); ?> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata(); }
しかし、そもそも$sや$forum_idのvalueが取得できませんでした。echo で出力を試みたのですが、何も出力されません。
bbpressの制作者様にも訪ねてみたのですが、返事がなかなか返ってこないため、相談させていただきました。
この目的の機能を達成するためにアドバイスをよろしくお願いします。ここまで読んでくださりありがとうございます。
回答1件
あなたの回答
tips
プレビュー