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

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

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

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

PHP

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

Q&A

解決済

1回答

2031閲覧

【WordPress】親ターム名のみを表示したいが、たまに子ターム名が表示されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/12/10 08:48

array_shift 関数を使い、配列の先頭から親ターム名を出力しようと試みています。

php

1<?php 2$term_parent = array_shift(get_the_terms($post->ID, 'taxonomy_slug')); 3$term_parent_name = $term_parent->name; 4echo '<span>' . esc_html($term_parent_name) . '</span>'; 5?>

しかし、例えば親子関係のタームが下記のような場合に、

青森県
-八戸市

東京都
-新宿区

▼出力結果
<span>八戸市</span>
<span>東京都</span>

となることがあり、「青森県」を出力したいのに「八戸市」が出力されてしまいます。
いつでも親ターム名を出力したいのですが、解決策をご存知の方おられませんでしょうか。

よろしくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/10 08:54

`$post->ID`の投稿にはターム『青森県』『八戸市』『東京都』『新宿区』の四つが設定されているということですか?
退会済みユーザー

退会済みユーザー

2018/12/10 14:55

ご質問ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/12/10 14:57 編集

いえ、$post->IDの投稿には、いづれかの親子タームしか含まれません。 青森県・八戸市の2つ、もしくは東京都・新宿区の2つ、いづれかのみです。
guest

回答1

0

ベストアンサー

termは必ずしも親>子の順番で入ってるとは限らないですからね
あくまで作られた順番です

get_termsを使ってparentがないtermだけを取得

php

1<?php 2$term_parent = array_shift(get_terms('taxonomy_slug',[ 3 'object_ids'=>$post->ID, 4 'parent'=>0 5])); 6$term_parent_name = $term_parent->name; 7echo '<span>' . esc_html($term_parent_name) . '</span>'; 8?>

投稿2018/12/11 06:00

編集2018/12/13 06:10
KazuhiroHatano

総合スコア7804

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

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

退会済みユーザー

退会済みユーザー

2018/12/12 08:47

KazuhiroHatano様 ご回答頂きありがとうございました。 しかし、記載してくださったコードを試したみたところ「北海道」のみが表示され、他の都道府県は表示されませんでした。 これはパラメータ「parent」に0を指定すると、最上位タームのみを返す仕様だからと考えます。 この点、認識違いがありましたら申し訳ありません。 また、最初の質問で説明不足がありましたので、改めて質問内容をまとめました。 ■実装したいこと 投稿に属するタームのうち、親ターム名のみを表示したい ■ターム構成 ・都道府県(親)と市区町村(子) ・市区町村(子)は複数 北海道 -函館 -札幌 青森 -青森市 -八戸市 -上北郡 東京都 -品川区 -千代田区 -渋谷区 -八王子市 -小平市 -府中市 など47都道府県と市区町村 ■投稿に属するターム 親と子、各1つのみ 例1) 投稿:「イベント開催のお知らせ」 ターム:北海道、函館 例2)投稿:「ポイントプレゼントキャンペーン」 ターム:東京都、渋谷区 質問投稿時に確認を怠り申し訳ありません。 どうぞよろしくお願い致します。
KazuhiroHatano

2018/12/12 09:07

>最上位タームのみを返す その通りです、親がないtermを返します(親がないtermはparentの値に0が入ってます) もしかして「渋谷区にチェックは入ってるけど東京都にチェックは入ってない」 というようなパターンへの対応が必要なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/12/13 05:46

>「渋谷区にチェックは入ってるけど東京都にチェックは入ってない」 >というようなパターンへの対応が必要なのでしょうか? いえ、投稿時には必ず親と子をセットでチェックします。 親1つ、子1つのセットです。 ・「北海道」をチェックする場合は、「函館」など北海道の市区町村を1つだけチェック ・「東京都」をチェックする場合は、「渋谷区」など東京都の市区町村を1つだけチェック という形です。
KazuhiroHatano

2018/12/13 06:11

単純に引数間違ってたのを修正
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問