【发布时间】:2018-04-22 19:11:40
【问题描述】:
我有这段代码,它以分层顺序从基于 woocommerce 的网站获取所有类别和子类别,它可以工作,但每次我想添加新的深度级别时
category
->sub-cat
->sub-sub-cat
->sub-sub-sub-cat
->etc
我必须在最后一个循环中再添加一个 foreach 循环(我什至不确定你是否能理解我说实话,我什至不知道如何解释这一点 - 抱歉,请耐心等待,这是我的PHPs 'fields' 的第二个月)
所以,我正在尝试摆脱所有这些 foreach 循环(以使其更具动态性),并且我听说有一种方法可以通过使用称为递归的东西来做到这一点,我可以使用这种东西来做到这一点。我真的不明白它是如何工作的,而且我已经读了一整天了,所以如果有人可以帮助我了解如何完成这项工作,我会很高兴吗?
这是我的代码,部分来自 StackOverflow。
<ul>
<?php
$taxonomy = 'product_cat';
$orderby = 'name';
$hierarchical = 1;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'hierarchical' => $hierarchical
);
$cat = get_categories( $args );
foreach ($cat as $c) {
if($c->category_parent == 0) {
$catID = $c->term_id;
echo '<li><a href="'. get_term_link($c->slug, 'product_cat') .'">'. $c->name .'</a>';
$args = array(
'taxonomy' => $taxonomy,
'parent' => $catID,
'orderby' => $orderby,
'hierarchical' => $hierarchical
);
$cat = get_categories( $args );
if($cat) {
echo '<ul>';
foreach($cat as $c) {
$catID = $c->term_id;
echo '<li><a href="'. get_term_link($c->slug, 'product_cat') .'">'. $c->name , apply_filters( 'woocommerce_subcategory_count_html', ' (' . $c->count . ')', $category ) .'</a>';
$args = array(
'taxonomy' => $taxonomy,
'parent' => $catID,
'orderby' => $orderby,
'hierarchical' => $hierarchical
);
$cat = get_categories( $args );
if($cat){
echo '<ul>';
foreach ($cat as $c) {
$catID = $c->term_id;
echo '<li><a href="'. get_term_link($c->slug, 'product_cat') .'">'. $c->name , apply_filters( 'woocommerce_subcategory_count_html', ' (' . $c->count . ')', $category ) .'</a>';
$args = array(
'taxonomy' => $taxonomy,
'parent' => $catID,
'orderby' => $orderby,
'hierarchical' => $hierarchical
);
$cat = get_categories( $args );
if($cat){
echo '<ul>';
foreach ($cat as $c) {
$catID = $c->term_id;
echo '<li><a href="'. get_term_link($c->slug, 'product_cat') .'">'. $c->name , apply_filters( 'woocommerce_subcategory_count_html', ' (' . $c->count . ')', $category ) .'</a></li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
echo '</li>';
}
}
?>
它工作得很好,虽然我知道它不太聪明,所以请不要对我太苛刻。
【问题讨论】:
-
WordPress 还提供了一个可以做到这一点的功能,所以你可能会在这里看看它是否适合你:developer.wordpress.org/reference/functions/walk_category_tree
标签: php wordpress recursion foreach woocommerce