我已经看到了一些关于如何显示父类别和子类别的问题,但似乎找不到我正在做的事情的解决方案。
我正在使用默认的wordpress帖子,其中有几个类别和子类别,例如我有
新闻 - 旅行 - 世界 - 业务
文章 - 一般
案例研究 -Thomas Cook - Easy Jet
帖子可以有任意数量的类别,但我要做的是将孩子与其父母分组,以便当我显示帖子时,例如,显示以下每个帖子使用的父母和子女类别format(除了最后一个孩子之后,在父和连字符之后的冒号)。
新闻:旅行 - 世界
目前我正在使用以下代码;
<?php
$categories = get_the_category();
$separator = ' - ';
$output = '';
if ( ! empty( $categories ) ) {
foreach( $categories as $category ) {
$output .= '<a class="blog-panel-cat" href="' . esc_url( get_category_link( $category->term_id ) ) . '" alt="' . esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ) . '">' . esc_html( $category->name ) . '</a>' . $separator;
}
echo trim( $output );
}
?>
但是他只是输出一个类别而不能分组,所以我可以在父母之后添加':'并用' - '分隔父母的子项,并在下一个父母之前分隔一个双空格。
任何帮助表示赞赏
由于
伊恩
答案 0 :(得分:0)
我几个月前就完全相同的情况工作了,这是我的解决方案
//first part
$allcats = get_the_category();
$parent_id = $all_ids = array();
foreach ($allcats as $cats) {
//get all category id first
$all_ids[] = $cats->term_id;
// get top parent category
if ($cats->category_parent === 0 ) {
$parent_id[] = $cats->term_id;
}
}
//second part
$separator = ' » ';
$term_ids = implode( ',' , $all_ids );
$post_categories = '';
foreach ($parent_id as $parents) {
$parent_name = get_cat_name($parents);
$parent_link = get_category_link($parents);
$parent_cat = '<span class="parent"><a href="'.$parent_link.'">'.$parent_name.'</a></span>';
//get all sub category with certain ids
$child_cats = wp_list_categories(
array(
'child_of' => $parents,
'title_li' => '',
'style' => 'none',
'echo' => false,
'taxonomy' => 'category',
'include' => $term_ids,
)
);
$child_cats = rtrim( trim( str_replace( '<br />', $separator, $child_cats ) ), $separator );
$hcat .= '<b>'.$parent_cat.'</b> » '.$child_cats.'<br>';
}
echo $post_categories;
经过测试并希望得到这个帮助。
答案 1 :(得分:0)
我在Rest Api中做了类似的事情,所以这一切都是将所有类别排列成分层数组/对象。它只适用于一年级的孩子。
$allcats = get_categories(); // get ALL categories
// $allcats = get_the_category(); // get only categories assigned to post
$parents = $all_ids = array();
// find parents
foreach ($allcats as $cats) {
if ($cats->category_parent === 0 ) {
$cats->children = array();
$parents[] = $cats;
}
}
// find childredn and assign it to corresponding parrent
foreach ($allcats as $cats) {
if ($cats->category_parent != 0) {
foreach ($parents as $parent) {
if ($cats->category_parent === $parent->term_id) {
$parent->children[] = $cats;
}
}
}
}
所以结果将是:
[{
term_id: 50,
name: "Main Cat",
slug: "main-cat",
term_group: 0,
term_taxonomy_id: 50,
taxonomy: "category",
description: "",
parent: 0,
count: 77,
filter: "raw",
term_order: "1",
cat_ID: 50,
category_count: 77,
category_description: "",
cat_name: "main cat",
category_nicename: "main_cat",
category_parent: 0,
children: [
{
term_id: 49,
name: "Sub Cat",
slug: "sub-cat",
term_group: 0,
term_taxonomy_id: 49,
taxonomy: "category",
description: "",
parent: 50,
count: 43,
filter: "raw",
term_order: "1",
cat_ID: 49,
category_count: 43,
category_description: "",
cat_name: "sub_cat",
category_nicename: "Sub Cat",
category_parent: 50
},
{etc other children}
]
}]
希望这有助于某人...