質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4911閲覧

wordpressのbbpressサイト内検索結果をカスタマイズしたい

urazome

総合スコア26

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/08/27 08:24

編集2020/08/27 08:31

前提・実現したいこと

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の制作者様にも訪ねてみたのですが、返事がなかなか返ってこないため、相談させていただきました。
この目的の機能を達成するためにアドバイスをよろしくお願いします。ここまで読んでくださりありがとうございます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/29 08:50

複数のフォーラムにて同一名称のトピックがあった場合に、検索に使用したフォーラムに存在するトピックだけを検索結果に表示させたいという事で間違いないか?
urazome

2020/08/29 13:09

そうです。それぞれのフォーラムに検索フォームがあり、検索範囲はそれぞれのフォーラム内だけに絞ります。フォーラムBにある検索フォームで検索したら、フォーラムBに所属しているトピックしか表示しません。
guest

回答1

0

ベストアンサー

ざっとググったら

1つ目は、このサイトを参考に作りました。https://sevenspark.com/tutorials/how-to-search-a-single-forum-with-bbpress

このサイトが出て来たが、このサイトの説明通りで出来るだろうに。
多分、手順が間違っている。

これらをfunctions.phpに追記。

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' ); /* * Search only a specific forum */ function my_bbp_filter_search_results( $r ){ //Get the submitted forum ID (from the hidden field added in step 2) $forum_id = sanitize_title_for_query( $_GET['bbp_search_forum_id'] ); //If the forum ID exits, filter the query if( $forum_id && is_numeric( $forum_id ) ){ $r['meta_query'] = array( array( 'key' => '_bbp_forum_id', 'value' => $forum_id, 'compare' => '=', ) ); } return $r; } add_filter( 'bbp_after_has_search_results_parse_args' , 'my_bbp_filter_search_results' );

しかし、そもそも$sや$forum_idのvalueが取得できませんでした。echo で出力を試みたのですが、何も出力されません。

この原因は恐らく編集しているファイルの問題。

/wp-content/plugins/bbpress/templates/default/bbpress/内にあるform-search.phpを使用中のテーマのディレクトリに設置して中身を以下に変更

<?php /** * Search * * @package bbPress * @subpackage Theme */ $forum_id = bbp_get_forum_id(); ?> <form role="search" method="get" id="bbp-search-form" action="<?php bbp_search_url(); ?>"> <div> <label class="screen-reader-text hidden" for="bbp_search"><?php _e( 'Search for:', 'bbpress' ); ?></label> <input placeholder="Search <?php the_title(); ?> Topics" tabindex="<?php bbp_tab_index(); ?>" type="text" value="<?php echo esc_attr( bbp_get_search_terms() ); ?>" name="bbp_search" id="bbp_search" /> <?php if( $forum_id ): ?> <input class="button" type="hidden" name="bbp_search_forum_id" value="<?php echo $forum_id; ?>" /> <?php endif; ?> <input tabindex="<?php bbp_tab_index(); ?>" class="button" type="submit" id="bbp_search_submit" value="<?php esc_attr_e( 'Search', 'bbpress' ); ?>" /> </div> </form>

投稿2020/08/29 14:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

urazome

2020/08/30 04:50

回答ありがとうございます。 まるまるコピペし、キャッシュを削除したりして何回か試したのですが、やはり、ほかのフォーラムに所属しているトピックまで出力されてしまいます。 bbpressのtemplates/default内にあるものは全てchild-theme内にコピーして、そこで編集しています。 かれこれ2週間ほどbbpressのソースコードを読み解いたり、外国人で似たような問題の回答を調べたりしているのですが、実装できないです。お力を貸していただけると幸いです。
退会済みユーザー

退会済みユーザー

2020/08/30 08:27

参考にしたサイト通りに試してみたが$forum_idでフォーラムのIDを取得出来、そのフォーラム内のトピックしか検索結果に出なかったが。 > $forum_idのvalueが取得できませんでした。 ここが原因だろうな。
urazome

2020/08/30 13:39

編集したコードをコピーしてからプラグインのファイルを一度消して、やり直したところ、うまくいきました! 何が何でも実装したかったのですが、なぜかうまくいかなかったので心が折れそうでした... 何がいけなかったのか、これから探していこうと思いますが、この2週間phpの勉強ができたので良かったです。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問