2024年06月13日
WP関数:get_category_parents()
この関数の説明
WP関数の get_category_parents() は、カテゴリIDから、自分を含めた先祖のカテゴリ名リストを取得する関数です。
関数
get_category_parents( $cat_id, $link, $separator, $nicename )
パラメータ
$cat_id(整数) (必須)
投稿文書のカテゴリー IDを指定します
$link(真偽値) (オプション)
抽出したカテゴリと合わせてリンク情報を出力するか否かを指定します。
false :出力しない(デフォルト)
true :出力する
$separator(文字列) (オプション)
抽出したカテゴリーを区切る文字列を指定します。
初期値: '/'
$nicename(真偽値) (オプション)
カテゴリー名の代わりにスラッグ名を出力するか否か指定します。
false :カテゴリー名を出力
true :スラッグ名を出力
戻り値
$separator で区切られた親カテゴリー名リストを返します。
事例
①カテゴリ名リストを取得して、配列に変換します。
<?php $cat = get_the_category(); // 投稿文書のカテゴリ情報を取得 $cat_ID = $cat[0]->cat_ID; // カテゴリIDの取得 $cat_list = get_category_parents($cat_ID);// カテゴリ名のリストを取得 $cat_list = trim($cat_list , '/'); // 文字列の最後にある[/]を削除 $cat_list = preg_split('#/#' , $cat_list); // 文字列を[/]で分割して配列に変換 ?> <pre> <?php print_r($cat_list);?> <!-- カテゴリの配列の表示 --> </pre>
■2~3行目:現在の投稿に設定されているカテゴリIDを取得しています。
■4行目:カテゴリIDから自分を含めた先祖のカテゴリ名リストを取得します。
下記の様なリストが取得されますが最後の / が邪魔です。
例)第一階層/第二階層/WordPress 関数/
■5行目:後ろにある / を削除しています。
■6行目:取得したリストを下記の様に配列に変換しています。
結果は下記の様になります。
Array ( [0] => 第一階層 [1] => 第二階層 [2] => WordPress 関数 )
■配列なので1個ずつ取り出して処理できます。
②カテゴリ名の配列を使ってパンくずを作成します。
<?php if(is_single()):?> <!-- 投稿文書か否かを判定します。--> <?php $icon_home='<i class="fas fa-home"></i> ';// Font Awesomeのホームアイコンの設定 $icon_cat='<i class="far fa-clone"></i> '; // Font Awesomeのカテゴリアイコンの設定 $icon_file='<i class="far fa-file"></i> '; // Font Awesomeのファイルアイコンの設定 $title = get_the_title();// タイトルの取得 $cat = get_the_category();// カテゴリ情報の取得 $cat_id = $cat[0]->cat_ID;// カテゴリIDの取得 $cat_list = get_category_parents($cat_id,false,',');// カテゴリ名リストの取得 $cat_list = trim($cat_list,',');// カテゴリ名リストの修正 $cat_array = preg_split('/,/',$cat_list);// カテゴリ名を配列に変換 ?> <a href='<?php echo esc_url(home_url()); ?>'><?php echo $icon_home; ?>HOME</a> / <!-- ホームリンクの表示--> <?php foreach($cat_array as $cat):?><!-- カテゴリリンクの表示--> <?php $cat_id = get_cat_ID($cat);?> <a href='<?php echo esc_url(get_category_link($cat_id));?>'><?php echo $icon_cat.esc_html(get_cat_name($cat_id));?></a> / <?php endforeach;?> <?php echo $icon_file.esc_html($title);?><!-- 文書名の表示--> <?php endif;?>
下記の様にパンくずが表示されます。
■14~19行目:ここでリンク付きのカテゴリを表示していますが、echoする際にエスケープ処理を行っています。
関連情報
親を探す手段には get_ancestors() という関数もあります。
関連関数は カテゴリ関連関数 を参照してください。