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

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

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

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

Q&A

解決済

1回答

856閲覧

カスタムタクソノミーのプルダウン内の表示について

yusyu

総合スコア13

WordPress

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

0グッド

0クリップ

投稿2018/01/26 08:03

編集2018/01/26 08:29

イメージ説明
上図の様に親と子が分かりやすい表示をやりたいのですが、色々調べるも頭がこんがらがってしまいました。

<form method="get" id="testSearch" action="<?php echo home_url('/'); ?>"> <input type="hidden" name="post_type" value="osakahu"> <ul style="list-style: none; padding-left: 0;"> <li><select name="osaka"> <option value="" >選択</option> <?php $terms = get_terms('osaka'); foreach ($terms as $term): ?> <option value="<?php echo esc_attr($term->slug); ?>"> <?php echo esc_html($term->name); ?></option> <?php endforeach; ?> </select> </li> </ul> <input type="submit" value="検索" /> </form>

ここまでは、調べてやりました。

function add_post_taxonomy_restrict_filter() { global $post_type; if ( 'osakahu' == $post_type ) { echo '<select name="osaka">'; echo '<option value="">カテゴリー指定なし</option>'; $terms = get_terms('osaka', 'hide_empty=0'); foreach ($terms as $term) : if ($term->parent == 0): echo '<option value="' . $term->slug . '">' . $term->name . '</option>'; $parentID = $term->term_id; $children = get_term_children( $parentID , 'osaka' ); if(!empty($children)): foreach($children as $childID): $child=get_term_by('id', $childID, 'osaka'); echo '<option value="' . $child->slug . '"> ' . $child->name . '</option>'; endforeach; endif; endif; endforeach; echo '</select>'; } } add_action( 'restrict_manage_posts', 'add_post_taxonomy_restrict_filter' );

これを参考に書いてみましたら、こうなりました。

<form method="get" id="testSearch" action="<?php echo home_url('/'); ?>"> <input type="hidden" name="post_type" value="osakahu"> <ul style="list-style: none; padding-left: 0;"> <li><select name="osaka"> <option value="" >選択</option> <?php $terms = get_terms('osaka'); foreach ($terms as $term): ?> <option value="<?php echo esc_attr($term->slug); ?>"> <?php echo esc_html($term->name); ?></option> <?php $parentID = $term->term_id; ?> <?php endforeach; ?>      <?php $children = get_term_children( $parent , 'osaka' ); foreach($children as $child):?> <option value="<?php echo esc_attr($child->slug);?>"><?php echo esc_html($child->name);?></option> <?php endforeach; ?>←ここでエラー </select> </li> </ul> <input type="submit" value="検索" /> </form>

で、syntax error, unexpected 'endforeach' (T_ENDFOREACH), expecting end of fileのエラーがでました。
どのようなワードで調べたらいいかも、分からなくなってしました。

追記:aozukiさんのお陰でエラーがなくなりました。
しかし、見てみると以下の図の様な普通の表示になりました。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

$children = get_term_children( $parent , 'osaka' );  ↓ $children = get_term_children( $parentID , 'osaka' );

の間違いでは?


【追記】
やりたいことは子タームの頭を一文字分下げるってことですよね?
書き直す前のコードでは<option>の後ろに全角スペースが入ってるので

<option value="<?php echo esc_attr($child->slug);?>"> <?php echo esc_html($child->name);?></option>

このように全角スペースを入れてやればどうでしょうか

投稿2018/01/26 08:13

編集2018/01/26 08:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yusyu

2018/01/26 08:17

指摘ありがとうごいます。 エラーが消えました。
yusyu

2018/01/26 09:07 編集

以下の様に言われた通りに全角スペースをいれました。でも、変わらなかったです涙 ---------------------------------------------------------------------------------------- <form method="get" id="testSearch" action="<?php echo home_url('/'); ?>"> <input type="hidden" name="post_type" value="osakahu"> <ul style="list-style: none; padding-left: 0;"> <li><select name="osaka"> <option value="" >選択</option> <?php $terms = get_terms('osaka',array('hide_empty'=> true)); foreach ($terms as $term): ?> <option value="<?php echo esc_attr($term->slug); ?>"><?php echo esc_html($term->name); ?></option> <?php $parentID = $term->term_id; ?> <?php endforeach; ?>      <?php $children = get_term_children( $parent , 'osaka' ); foreach($children as $child):?> <option value="<?php echo esc_attr($child->slug);?>"> <?php echo esc_html($child->name);?> </option> <?php endforeach; ?> </select> </li> </ul> <input type="submit" value="検索" /> </form> ----------------------------------------------------------------------------------------------
退会済みユーザー

退会済みユーザー

2018/01/26 08:50

変数名が$parentに戻ってます。
yusyu

2018/01/26 08:55

あ、保存していた方を変え忘れていました。 でも、変わらずでした。
退会済みユーザー

退会済みユーザー

2018/01/26 08:58 編集

全角スペースを &emsp; に置き換えるとどうなりますか?(1文字分のスペースを表す特殊記号です)
yusyu

2018/01/26 09:04 編集

``` <option value="<?php echo esc_attr($child->slug);?>">&emsp;<?php echo esc_html($child->name);?></option> ``` と入力しましたが、だめでした。
退会済みユーザー

退会済みユーザー

2018/01/26 09:11

全角スペースの代わりに &emsp; でも変化無しですか?
yusyu

2018/01/26 09:16

変化がないです。どこか記述ミスをしていないか確認しています。
退会済みユーザー

退会済みユーザー

2018/01/26 09:24

ちょっと調べてみましたが、<option>内のスペースはPCでは表示されましたがiOSでは表示されなかったので <optgroup>を使って項目ごとにグルーピングする方法の方が確実かもしれません。
yusyu

2018/01/26 10:12 編集

わざわざありがとうございます。 iosだと表示されないんですね。 そちらの方法で模索してみます>< お付き合いありがとうございました><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問