質問は簡単です。
「スーパーキャット」の子である「親キャット」の子である「サブキャット」カテゴリ内にある「シングル投稿」という名前の投稿があるとします。私がする必要があるのは以下の順序で投稿ページ内のすべての関連カテゴリを表示することです:
super-cat > parent-cat > sub-cat > Single Post
<?php
the_category( ' > ', 'multiple', $post->ID);
echo ' > ';
the_title();
?>
投稿がただ1つのカテゴリにある場合、これは正しく機能します。ただし、複数のカテゴリに属している場合、またはカテゴリの親も選択されている場合(あなたの場合は、投稿がスーパー猫と親猫にも含まれている場合)、これらのカテゴリは2回表示されます。
だから、これはおそらくあなたのためにそれをするつもりはないです。
私は ブレッドクラム型プラグイン のいくつかがこれを解決したかもしれないと思います。
あなたは最初にカテゴリをソートする必要があります。
// get categories of post in sorted order
$categories = sortCategories(get_the_category());
foreach($categories AS $category) {
echo $category->name; // Plot category name
}
echo get_the_title(); // Plot post name
function sortCategories($categories) { // Sorting the category
usort($categories, "cmpCategories");
return $categories;
}
function cmpCategories($category_1,$category_2) { // Sort function
foreach(get_categories(array("parent" => $category_1->cat_ID)) AS $sub) {
if($category_2->cat_ID == $sub->cat_ID) return -1;
}
return 1;
}
これが助けになれば幸いです。
これでうまくいくはずです。
$cats = get_the_category(); //retrieve cats for post
foreach ($cats as $cat) { //go thru to find child one - means cat which has specified parent id
if ($cat->category_parent != 0) {
$child = $cat->term_taxonomy_id;
}
}
echo get_category_parents( $child, TRUE, ' > ' );
最初に特定の投稿のカテゴリを取得してから、最後の子を見つけ、次にget_category_parentsを使って親のツリー全体を取得します。
古い質問ですが、私にとってはGoogleでの最高の結果です。複数のカテゴリをサポートするブレッドクラムカテゴリをすばやく見つけることができなかったので、簡単にスタイリングできるように作成し、ul
でラップしました。
// breadcrumb categorization
$cats = wp_get_post_categories( get_the_ID() ); //post id
foreach($cats as $c) {
$ancestors = array_merge( array_reverse( get_ancestors( $c, 'category' ) ), [$c] );
echo '<ul class="post-categories">';
foreach($ancestors as $id){
echo '<li><a href="' . esc_url( get_category_link( $id) ) . '">' . get_cat_name( $id ) . '</a></li>';
}
echo '</ul>';
}
これが私の実用的な解決策です。
$categories = get_the_category();
$ordering = array();
foreach( $categories as $index => $cat) {
$ordering[$cat->parent] = $index;
}
$ordered_string = "";
$i = 0;
while( $ordering[$i] !== null ){
$ordered_string .= '<li class="item-cat"><a href="'.get_category_link( $categories[$ordering[$i]]->term_id ).'">'.$categories[$ordering[$i]]->name.'</li>';
$i = $categories[$ordering[$i]]->term_id;
}
echo $ordered_string;
それはブレッドクラムの準備が整った文字列をエコーします、そして少し修正することであなたは配列として配列されたカテゴリーを得ることができます。