我创建了一个递归函数,我需要的是获取该产品的父类别描述和term_id。
function desc_pro($parent) {
$term = get_term_by('parent', $parent, 'product_cat');
$description = $term->description;
while($description == null) {
$desc = desc_pro($term->parent);
return $desc;
}
return $description;
}
现在,当我运行此代码时,我得到了正确的描述。 但如果我删除任何返回,那么它将无法正常工作。它显示为空白。 (这没关系?我认为代码错了?)
第二:我需要term_id,当我创建数组时,它也会发送所有子类别id。哪个错了。我只需要那个有描述的id。
我认为代码错了?还是有其他问题?
这是我的数组:(我发送的是我的php页面中的父类别。所以我打电话 function get_desc(48);)
它给我第一个对象,现在我必须测试是否可用描述? 如果是,则停止并返回描述,并且它是term_id。 如果它不可用,则获取父ID并再次检查。所以这一直持续到找到描述为止。
stdClass Object
(
[term_id] => 48
[name] => Cereal
[slug] => cereal
[term_group] => 0
[term_taxonomy_id] => 49
[taxonomy] => product_cat
[description] =>
[parent] => 46
[count] => 0
)
stdClass Object
(
[term_id] => 46
[name] => Grocery Store A
[slug] => grocery-store-a
[term_group] => 0
[term_taxonomy_id] => 47
[taxonomy] => product_cat
[description] => FDIC, 17th Street Northwest, Washington, DC
[parent] => 45
[count] => 0
)
答案 0 :(得分:1)
由于您的while循环不会更改$description
而$desc
,如果它不是基本情况并且您创建了无限循环,则它始终为null
。
试试这个:
function desc_pro($parent) {
$term = get_term_by('parent', $parent, 'product_cat');
$description = $term->description;
if( $description == null)
return desc_pro($term->parent); // recurse if not set
//$description = desc_pro($term->parent); // an alternative to the above
return $description; // base case (when set)
}
退货和转让之间的差异是额外的回报。 PHP不进行尾调用优化,所以它并没有那么不同,只是没有注释的那个看起来更适合函数式程序员。
对于迭代方法,while循环会很好:
function desc_pro($parent) {
$description = null;
while( $description == null) {
$term = get_term_by('parent', $parent, 'product_cat');
$description = $term->description;
}
return $description; // base case (when set)
}