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

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

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

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

PHP

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

Q&A

解決済

1回答

1501閲覧

(bbpress) selectタグのselectedで、トピックの登録フォーラムを選択したい

jo-ji

総合スコア16

WordPress

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

PHP

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

1グッド

1クリップ

投稿2021/01/27 01:23

編集2021/02/01 08:00

やりたいこと

bbpressのトピック作成欄で、分岐項目(セレクトボックス)を作って
トピックの登録フォーラムを選択できるようにカスタマイズしたい。

(例)
親フォーラム 果物、野菜、お菓子

子フォーラム 
(果物) りんご、メロン、みかん
(野菜) にんじん、たまねぎ、なす
(お菓子)チョコ、あめ、ガム
イメージ説明

add_action ( 'bbp_theme_before_topic_form_content', 'bbp_extra_fields'); function bbp_extra_fields() { $category = "カテゴリー"; echo $category; // 親フォーラムのセレクトボックスを表示 ?> <select class="forums" name="forum" style="height:30px;padding-top:0;color:black;"> <option value="" disabled style="display:none;" <?php if($_POST['forum']=='0') echo 'selected'; ?>>選択してください</option> <option value="1" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '1' ? 'selected' : ''; ?>>果物</option> <option value="2" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '2' ? 'selected' : ''; ?>>野菜</option> <option value="3" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '3' ? 'selected' : ''; ?>>お菓子</option> </select> //子フォーラムのセレクトボックスを表示 <?php if($_POST['forum']=='1'){ echo '>>>'; $_POST['forum']='00'; ?> <select class="forums" name="forum" style="height:30px;padding-top:0;color:black;"> <option value="" disabled style="display:none;" <?php if($_POST['forum']=='00') echo 'selected'; ?>>選択してください</option> <option value="11" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '11' ? 'selected' : ''; ?>>りんご</option> <option value="12" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '12' ? 'selected' : ''; ?>>メロン</option> <option value="13" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '13' ? 'selected' : ''; ?>>みかん</option> </select> <?php } if($_POST['forum']=='2'){ $_POST['forum']='00'; echo '>>>'; ?> <select class="forums" name="forum" style="height:30px;padding-top:0;color:black;"> <option value="" disabled style="display:none;" <?php if($_POST['forum']=='00') echo 'selected'; ?>>選択してください</option> <option value="21" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '21' ? 'selected' : ''; ?>>にんじん</option> <option value="22" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '22' ? 'selected' : ''; ?>>たまねぎ</option> <option value="23" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '23' ? 'selected' : ''; ?>>なす</option> </select> <?php } if($_POST['forum']=='3'){ $_POST['forum']='00'; echo '>>>'; ?> <select class="forums" name="forum" style="height:30px;padding-top:0;color:black;"> <option value="" disabled style="display:none;" <?php if($_POST['forum']=='00') echo 'selected'; ?>>選択してください</option> <option value="31" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '31' ? 'selected' : ''; ?>>チョコ</option> <option value="32" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '32' ? 'selected' : ''; ?>>あめ</option> <option value="33" <?php echo array_key_exists('forum', $_POST) && $_POST['forum'] == '33' ? 'selected' : ''; ?>>ガム</option> </select> <?php } if($_POST['forum']=='11'){ echo "子フォーラム「りんご」を選択しました。";} if($_POST['forum']=='12'){ echo "子フォーラム「メロン」を選択しました。";} if($_POST['forum']=='13'){ echo "子フォーラム「みかん」を選択しました。";} if($_POST['forum']=='21'){ echo "子フォーラム「たまねぎ」を選択しました。";} if($_POST['forum']=='22'){ echo "子フォーラム「にんじん」を選択しました。";} if($_POST['forum']=='23'){ echo "子フォーラム「なす」を選択しました。";} if($_POST['forum']=='31'){ echo "子フォーラム「チョコ」を選択しました。";} if($_POST['forum']=='32'){ echo "子フォーラム「あめ」を選択しました。";} if($_POST['forum']=='33'){ echo "子フォーラム「ガム」を選択しました。";} }

引用元

親フォーラムのセレクトボックスは表示され選択できますが、$_POST['forum']の値保持が出来ずに、
親フォーラムを選択後に子フォーラムのセレクトボックス自体が表示されません。
$_POST['forum']の値保持が出来ない原因が知りたいです。

もう一点、

$_POST['forum'] =='11' ? 'selected' : '';

の「?」にはどんな意味があるのでしょうか?

以上の回答、よろしくお願いいたします。

shimi111👍を押しています

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

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

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

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

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

m.ts10806

2021/01/27 01:26

WordPressプラグインでしょうか。 でしたら質問タグを追加してください。
jo-ji

2021/01/27 01:33 編集

はい、Wordpressのプラグインです。 タグ(Wordpress)を追加しました。以上でよろしいでしょうか?
kei344

2021/01/28 13:56

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
jo-ji

2021/01/28 15:01

了解しました。
guest

回答1

0

ベストアンサー

最初に0を入力しているからではないでしょうか?

PHP

1<?php $_POST['forum']='0'; ?> 2

下記はif文を1行で書いています。
?の左側が条件式で:の左側が真の場合、右側が偽の場合です。

PHP

1$_POST['forum'] =='11' ? 'selected' : '';

投稿2021/01/27 23:32

tabuu

総合スコア2480

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

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

jo-ji

2021/01/28 03:22 編集

$_POST['forum']='0';と初期化すると、最後までずっと固定されます。 指摘された通り、初期化はダメですね。 var_dump($_POST['forum']);を子フォーラム前のコードに入れて調べたら、 親フォーラムの選択を変えてもNull表示され  $_POST['forum']の値は変更されてない(空)みたいです。 原因はわかりませんが、value(値)がPOSTされてないようです。 「?」の回答、ありがとうございました。 理解が深まりました。
tabuu

2021/01/28 05:00

HTMLのソースを確認してみてください。 ・formタグの中にselectがありますか? ・forumという名称のタグが他にありませんか? 上記問題無い場合は <input type="hidden" name="forum" value="3"> というようなタグをformの閉じタグの直ぐ上に追記してPHP側で値を確認してみていただけないでしょうか?
tabuu

2021/01/28 05:04

確認ですが、親セレクトボックスでアイテムを選択後にsubmitボタンを押して、 ページを読み込み直した後にPOSTの値を確認されているのですよね?
jo-ji

2021/01/28 05:27 編集

>>ぺージを読み込み直した後にPOSTの値を確認されているのですよね? 投信ボタンを押してページを移動した後に、ブラウザの(⇐)で戻るとPOSTの値は保存されてます。 >>HTMLのソースを確認してみてください。 確認ですがHTMLのソースは、グーグルクロムの表示画面の右クリックで「検証」後に表示される HTMLコードですか?
tabuu

2021/01/28 05:28

>var_dump($_POST['forum']);を子フォーラム前のコードに入れて調べたら、 >親フォーラムの選択を変えてもNull表示され >$_POST['forum']の値は変更されてない(空)みたいです。 >bbpressでは、フォーマット入力後に送信すると、リプライページに移ります。 >よってフォーマット入力ページに戻り、POSTの値を確認できません。 POSTの値は確認できないとありますが、nullであると確認されたともあります。 どのように確認されたのでしょうか? また、子セレクトボックスで値を選択していないので、入力エラーとして リプライページに移らないようにする必要があるのではないでしょうか?
jo-ji

2021/01/28 05:44 編集

>>POSTの値は確認できないとありますが、nullであると確認されたともあります。 どのように確認されたのでしょうか? POSTは、ブラウザの(⇐)で戻った時しか、確認できませんでした(POST値は保存されてました)。 var_dump($_POST['forum']);表示を親セレクトボックスの横に設置しました。 そして入力画面のセレクトボックスの選択を変えた時、Null表示が変化するかどうかを確認しました。
jo-ji

2021/01/28 05:43

>>子セレクトボックスで値を選択していないので、入力エラーとして リプライページに移らないようにする必要があるのではないでしょうか? おっしゃる通りです。そうしたいのですが、そこまで手が回ってません。
tabuu

2021/01/28 05:48

>POSTは、ブラウザの(⇐)で戻った時しか、確認できませんでした。 この確認方法は正しくありませんのでやめておきましょう。 ●改めて確認ですが、どのような挙動を想定しているのでしょうか? 親セレクトボックスで値を選択してsubmitするとリプライページに移るとおっしゃっています。 そうすると子セレクトボックスを表示するタイミングがありません。
jo-ji

2021/01/28 05:52

submitする前に、親セレクトボックスを選択した後、真横に子セレクトボックスが表示され それを選択するとさらに真横に「~フォーラムが選択されました」と表示されるまでを 想定しています。
jo-ji

2021/01/28 05:58

そこまで完成したら、実際にフォーラムを選択するコードを 『echo '~フォーラムを選択されました'』部分に実装する予定です。 今はその前段階です。
tabuu

2021/01/28 06:04

>submitする前に、親セレクトボックスを選択した後、真横に子セレクトボックスが表示され 親セレクトボックスを選択した後にリロードやページ遷移せずに子セレクトボックスを 表示するということであればPHPではなくJavaScriptで処理する必要があります。 セレクトボックスのchangeイベントで値を取得して子セレクトボックスを切り替える ようにしましょう。 >『echo '~フォーラムを選択されました'』部分に実装する予定です。 提示されているソースコードはフォームを表示するコードです。 ここではなく、トピックを登録する処理に実装しましょう。
jo-ji

2021/01/28 06:20

>親セレクトボックスを選択した後にリロードやページ遷移せずに子セレクトボックスを >表示するということであればPHPではなくJavaScriptで処理する必要があります。 そうなんですか??? 特に表示にはこだわりは無いので、子フォーラムのセレクトボックスを最初から表示させるようにします。 大変参考になる意見、ありがとうございました。 PHPとHTMLもまだ勉強中なので、JavaScriptは私には無理です。 余裕が出来たら、JavaScriptに挑戦します。 >>ここではなく、トピックを登録する処理に実装しましょう。 私の中では、その点は曖昧です。 『echo '~フォーラムを選択されました'』部分に、bbpressの関数を設置して その関数に既存フォーラムIDを(数行)記入すれば登録されるだろう、と想定していました。 そのため、色々bbpress関数を探していました。
jo-ji

2021/01/28 06:38

確認ですが、PHPだけで親フォーラムを選択後に、子フォーラムの選択内容を変えることは 不可能ということですか?
tabuu

2021/01/28 07:42

トピックはbbp_insert_topicという関数で作成されます。 フォーラムのシングルページであれば自動でそのフォーラムにトピックが登録されますが、 セレクトボックスでフォーラムを選択するということですので、うまいことこの関数に フォーラムIDを渡してあげてください。 >確認ですが、PHPだけで親フォーラムを選択後に、子フォーラムの選択内容を変えることは >不可能ということですか? リプライページではなく、子セレクトボックスを選択するページに遷移するように制御すれば可能です。
jo-ji

2021/01/28 08:07 編集

>>子セレクトボックスを選択するページに遷移するように制御すれば可能です。 あ!! その手がありました。 そうすれば、連動セレクトボックスは必要ありませんね。 >>トピックはbbp_insert_topicという関数で作成されます。 できれば、どうやって見つけたか教えてもらえませんか? あなたの探すプロセスが知りたいです。 bbpressの約300個くらいある関数を探していましたが、私の力では見つけられませんでした。 私はHOOKRというサイトで、ずっと探していました。 http://hookr.io/plugins/bbpress/2.5.9/functions/
tabuu

2021/01/28 08:28

>できれば、どうやって見つけたか教えてもらえませんか? 勘です。 insert_topic、add_topicなどの当たりを付けてソースを検索したり、 内部的にwp_insert_postを使っているだろうと予測したりする感じです。
jo-ji

2021/01/28 09:14

経験者の勘ですね。わかりました。 私もいつか教える側に立てるように、努力していきます。 色々丁寧に教えてもらいました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問