Php 将父类别和子类别分组以进行发布和显示
我看到了一些关于如何显示父类别和子类别的问题,但似乎找不到解决方案 我正在使用默认的wordpress帖子和几个类别以及子类别作为示例 新闻 -旅行 -世界 -生意 文章 -一般的 案例研究 -托马斯·库克 -易喷 文章可以有任意数量的类别,但我想做的是将子项与其父项分组,以便在显示文章时,它可以以以下格式显示每个文章所使用的父项和子项类别(父项后面的冒号和子项后面的连字符,最后一个除外) 新闻:旅游世界 目前我正在使用以下代码Php 将父类别和子类别分组以进行发布和显示,php,wordpress,Php,Wordpress,我看到了一些关于如何显示父类别和子类别的问题,但似乎找不到解决方案 我正在使用默认的wordpress帖子和几个类别以及子类别作为示例 新闻 -旅行 -世界 -生意 文章 -一般的 案例研究 -托马斯·库克 -易喷 文章可以有任意数量的类别,但我想做的是将子项与其父项分组,以便在显示文章时,它可以以以下格式显示每个文章所使用的父项和子项类别(父项后面的冒号和子项后面的连字符,最后一个除外) 新闻:旅游世界 目前我正在使用以下代码 <?php $categories = get_the_c
<?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 );
}
?>
但是他只是一个接一个地输出一个类别,没有分组的方法,所以我可以在父级之后添加“:”,并用“-”分隔该父级的子级,在下一个父级之前还有一个双空格
谢谢你的帮助
谢谢
伊恩几个月前我就处理过同样的案子,下面是我的解决方案
//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;
//第一部分
$allcats=获取_类别();
$parent_id=$all_id=array();
foreach($allcats作为$cats){
//首先获取所有类别id
$all_id[]=$cats->term_id;
//获取顶级父类别
如果($cats->category_parent==0){
$parent\u id[]=$cats->term\u id;
}
}
//第二部分
$separator='raquo;';
$term_id=内爆(',',$all_id);
$post_类别=“”;
foreach($parent\u id作为$parents){
$parent\u name=get\u cat\u name($parents);
$parent\u link=获取类别链接($parents);
$parent_cat='';
//获取具有特定ID的所有子类别
$child\u cats=wp\u列表\u类别(
排列(
“=>$父母的子女”,
“title_li'=>”,
“样式”=>“无”,
“echo”=>错误,
“分类法”=>“类别”,
'包括'=>$term\u id,
)
);
$child_cats=rtrim(修剪(str_replace('
',$separator,$child_cats)),$separator);
$hcat.=''.$parent_cat.»;'.$child_cat.'
';
}
echo$post_类别;
已测试,希望能有所帮助。我在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}
]
}]
希望这对某人有帮助