get_term_childrenの返り値が配列だからです。
配列から値を取り出してあげれば大丈夫だと思います。
if (empty($term_children))
この部分を
if (empty($term_children[0]))
こう変更してあげれば判別できるようになるはずです。
ご回答ありがとうございます!
if (empty($term_children[0]))
としてみましたが、該当部分から下が真っ白になってしまいました。
何が問題かお分かりになりますか。
よろしくお願いいたします。
すみませんが情報が少なすぎます。
現在の情報ではget_term_childrenに関する部分しかお答えできません。
$term_idと$taxonomy_nameはそもそも正しく取得できているのでしょうか?
このソースを記述しているのはどのファイルですか?
また、パンくずリストを作るためにということですが、この記述部分はカテゴリーアーカイブ用のものですか?
それとも投稿ページ用のものですか?
パンくずリストが作れればまったく別のアプローチでも構わないのでしょうか?
get_term_children でデータがなければ、WP_Error を返すとあります。
ので、
if($term_children)
ではダメでしょうか。
あるいは
if ($term_children->count == 0 && is_wp_error($term_children))
あたりかなぁとか思います。
もし、kimipoohさんのおっしゃってるようにWP_Errorが返ってきているということであれば、
$taxonomy_nameが正しく取得できていない(存在しないタクソノミー名が指定されている)ということですので、
$taxonomy_nameの取得の部分を見直してみてください。
カスタム投稿等ではなく、シンプルな投稿ページのカテゴリーであれば、’category’を指定すれば大丈夫です。
それでもうまくいかないなら、$term_idの取得部分も見直してください。
確かに、根本的に $term_id と $taxonomy_name に意図したデータが入っているかのチェックが先ですね。
var_dump($term_id);
var_dump($taxonomy_name);
などして、意図したデータが入っているか確認してみるとよいと思います。
お示しのソースコードだけでは、それらの変数に値が入っていないので動作しませんしね。
最低でも
$cats = get_the_category();
$cat = $cats[0];
if($cat){
$term_id = $cat->term_id;
$taxonomy_name = $cat->taxonomy;
$term_children = get_term_children($term_id, $taxonomy_name);
if($term_children){ // 子カテゴリーが1つ以上あるとき
HTMLが入ります
}else{ // 子カテゴリーがないとき
HTMLが入ります
}
}
あたりのコードはいるんじゃないかな〜とは思いますね。
Akane様、kimiphooh様、ご教示ありがとうございます。
情報が不十分で申し訳ありません。
投稿ページのパンくずリストです。
Akane様ご指摘の
> $term_idと$taxonomy_nameはそもそも正しく取得できているのでしょうか?
> このソースを記述しているのはどのファイルですか?
ですが、kimiphooh様にお教えいただいたコードで試したところ「NULL」となってしまって、ご指摘通りそもそも定義ができていませんでした。
kimiphooh様が示してくださったコードで定義をしたら、うまく判別することができました。
何とか実装できそうです。
誠に誠にありがとうございました。
うまくいってなによりでした。
ちなみにやっていることは、
1. 現在ページのカテゴリーを取得
2. 取得したカテゴリーの最初の1つを取り出す
3. 取り出したカテゴリーに子カテゴリがあるかドウかチェック
です。のでページにカテゴリーが複数設定されていて、そのうち1つでも子カテゴリーがあるなら〜という条件分岐であるなら、
$cat = $cats[0]; とせずに
$cats = get_the_category();
$cat_child_flag = false;
if($cats){
foreach($cats as $cat){
if($cat){
$term_id = $cat->term_id;
$taxonomy_name = $cat->taxonomy;
$term_children = get_term_children($term_id, $taxonomy_name);
if($term_children){
$cat_child_flag = true;
break;
}
}
}
if($cat_child_flag){ // いずれかのカテゴリーに、子カテゴリーがある場合
HTMLが入ります
}else{ // すべてのカテゴリーに子カテゴリーがないとき
HTMLが入ります
}
}
のような感じになると思います。
丁寧な説明までありがとうございます!!
とても勉強になります。
カテゴリーは親1つ子1つなので、はじめに教えていただいた方が近いのですが、2つ目も勉強になります。
ご親切にお教えいただいて本当にありがとうございました。
とても助かりました。