カテゴリー名の文字列を親カテゴリーも含めて生成します。親を先に、子を先に、というのを切り替えたり、セパレーター文字列を指定したりできるように作っています。
<?php
/**
* カテゴリー名文字列を親カテゴリーも含めて生成
*
* @param WP_Term $obj カテゴリーオブジェクト
* @param string $sep セパレータ
* @param boolean $order カテゴリー名文字列生成の並び順(true:子→親、false:親→子)
*/
function get_category_hierarchical_string($obj, $sep = ' | ', $order = true)
{
$rval = "";
// カテゴリーを再帰的に取得(子→親の順で取得される)
$cats = get_category_recursive($obj);
// 再帰的に取得したカテゴリーからカテゴリー名文字列を生成
foreach ($cats as $cat) {
// 文字列が空でなければセパレーターを追加
if (!empty($rval)) {
// 並び順によって前に追加するか後ろに追加するか
if ($order) {
$rval .= $sep;
} else {
$rval = $sep.$rval;
}
}
if ($order) {
$rval .= $cat->name;
} else {
$rval = $cat->name.$rval;
}
}
return $rval;
}
/**
* カテゴリーを再帰的に取得
*
* @param WP_Term $obj カテゴリーオブジェクト
* @param WP_Term[] $cats カテゴリーオブジェクトの配列
*/
function get_category_recursive($obj, $cats = array())
{
$cats[] = $obj;
if ($obj->category_parent > 0) {
$obj = get_category($obj->category_parent);
return get_category_recursive($obj, $cats);
} else {
return $cats;
}
}
上記を functions.php に追加しておいて、カテゴリーアーカイブなどで
<?php
// 現在のカテゴリーを取得
$cat_cur = get_category_by_slug($_cat_slug = get_query_var('category_name'));
// カテゴリー名文字列を生成
$str_cat_name = get_category_hierarchical_string($cat_cur, ' / ', false );
echo esc_html($str_cat_name);
みたいに使用します。上記の例の場合は「親カテゴリー名 / 子カテゴリー名」てな感じの出力が得られます。