WordPress:按块分别获取父类别和子类别
WordPress: get parent and child categories separately by blocks
我需要将父类别和子类别分成不同的块。现在我有
<ul>
<li class="cat-item">Parent_1
<ul class="children">
<li class="cat-item">Child_1_1</li>
<li class="cat-item">Child_1_2</li>
</ul>
</li>
<li class="cat-item">Parent_2
<ul class="children">
<li class="cat-item">Child_2_1</li>
<li class="cat-item">Child_2_2</li>
</ul>
</li>
<li class="cat-item">Parent_3
<ul class="children">
<li class="cat-item">Child_3_1</li>
<li class="cat-item">Child_3_1</li>
</ul>
</li>
</ul>
我需要这样的东西
<div class="parent">
<ul>
<li class="cat-item">Parent_1</li>
<li class="cat-item">Parent_2</li>
<li class="cat-item">Parent_3</li>
</ul>
</div>
<div class="children">
<ul>
<li class="cat-item">Child_1_1</li>
<li class="cat-item">Child_1_2</li>
</ul>
<ul>
<li class="cat-item">Child_2_1</li>
<li class="cat-item">Child_2_2</li>
</ul>
<ul>
<li class="cat-item">Child_3_1</li>
<li class="cat-item">Child_3_1</li>
</ul>
</div>
我可以单独获取父类别,一切都很好。我也可以获得所有的子类别,但问题是它们在父类别中没有分离。
<?php
$args = array(
'taxonomy' => 'courses',
'hierarchical' => true,
'hide_empty' => false,
'title_li' => '',
'parent' => 0 // with this argument, I get only the parent
);
?>
<div class="submenu">
<ul>
<?php wp_list_categories($args); ?>
</ul>
</div>
试试下面的代码。您可以使用 get_terms()
函数来获取 courses
的所有项。然后你可以迭代循环并检查是父还是子。
$taxonomies = get_terms( array(
'taxonomy' => 'courses',
'hide_empty' => false
) );
if ( !empty($taxonomies) ) :
$output = '<div class="parent"><ul>';
foreach( $taxonomies as $category ) {
if( $category->parent == 0 ) {
$output .= '<li class="cat-item">'.$category->name.'</li>';
}
}
$output.='</ul></div>';
echo $output;
endif;
if ( !empty($taxonomies) ) :
$output = '<div class="children">';
foreach( $taxonomies as $category ) {
if( $category->parent == 0 && get_term_children( $category->term_id, 'product_cat' ) ) {
$output.= '<ul>';
foreach( $taxonomies as $subcategory ) {
if($subcategory->parent == $category->term_id ) {
$output .= '<li class="cat-item">'.$subcategory->name.'</li>';
}
}
$output.='</ul>';
}
}
$output.='</div>';
echo $output;
endif;
已测试并有效。
我需要将父类别和子类别分成不同的块。现在我有
<ul>
<li class="cat-item">Parent_1
<ul class="children">
<li class="cat-item">Child_1_1</li>
<li class="cat-item">Child_1_2</li>
</ul>
</li>
<li class="cat-item">Parent_2
<ul class="children">
<li class="cat-item">Child_2_1</li>
<li class="cat-item">Child_2_2</li>
</ul>
</li>
<li class="cat-item">Parent_3
<ul class="children">
<li class="cat-item">Child_3_1</li>
<li class="cat-item">Child_3_1</li>
</ul>
</li>
</ul>
我需要这样的东西
<div class="parent">
<ul>
<li class="cat-item">Parent_1</li>
<li class="cat-item">Parent_2</li>
<li class="cat-item">Parent_3</li>
</ul>
</div>
<div class="children">
<ul>
<li class="cat-item">Child_1_1</li>
<li class="cat-item">Child_1_2</li>
</ul>
<ul>
<li class="cat-item">Child_2_1</li>
<li class="cat-item">Child_2_2</li>
</ul>
<ul>
<li class="cat-item">Child_3_1</li>
<li class="cat-item">Child_3_1</li>
</ul>
</div>
我可以单独获取父类别,一切都很好。我也可以获得所有的子类别,但问题是它们在父类别中没有分离。
<?php
$args = array(
'taxonomy' => 'courses',
'hierarchical' => true,
'hide_empty' => false,
'title_li' => '',
'parent' => 0 // with this argument, I get only the parent
);
?>
<div class="submenu">
<ul>
<?php wp_list_categories($args); ?>
</ul>
</div>
试试下面的代码。您可以使用 get_terms()
函数来获取 courses
的所有项。然后你可以迭代循环并检查是父还是子。
$taxonomies = get_terms( array(
'taxonomy' => 'courses',
'hide_empty' => false
) );
if ( !empty($taxonomies) ) :
$output = '<div class="parent"><ul>';
foreach( $taxonomies as $category ) {
if( $category->parent == 0 ) {
$output .= '<li class="cat-item">'.$category->name.'</li>';
}
}
$output.='</ul></div>';
echo $output;
endif;
if ( !empty($taxonomies) ) :
$output = '<div class="children">';
foreach( $taxonomies as $category ) {
if( $category->parent == 0 && get_term_children( $category->term_id, 'product_cat' ) ) {
$output.= '<ul>';
foreach( $taxonomies as $subcategory ) {
if($subcategory->parent == $category->term_id ) {
$output .= '<li class="cat-item">'.$subcategory->name.'</li>';
}
}
$output.='</ul>';
}
}
$output.='</div>';
echo $output;
endif;
已测试并有效。