Woocommerce在single-product.php上获得父级slug / name

时间:2018-03-29 13:24:39

标签: woocommerce parent categories

我知道人们之前已经在这里询问过有关woocommerce和获取父类别的问题。我通过Stack Overflow做了很多研究,并且看到了很多不符合我想要实现的简单性的答案。

基本上我有我的single-product.php页面,我们有一个网站需要不同的页眉/页脚,并根据产品所属的类别进行设计。

为了实现这一目标,我们只需要访问父类别的名称,这样我们就可以指定它应该加载的页眉/页脚。

我确实找到了this on wordpress.stackexchange,但它对我的需求来说过于复杂,所以我尝试将一些代码剥离并直接放在single-product.php页面中,如下所示:

global $post;

$descendant = get_the_terms( $post->ID, 'product_cat' );
$descendant = array_reverse($descendant);
$descendant = $descendant[0];
$descendant_id = $descendant->term_id;
$ancestors = array_reverse(get_ancestors($descendant_id, 'product_cat'));
$ac = count($ancestors);
$c = 1;
$origin_ancestor_term = get_term_by("id", $ancestors[0], "product_cat");
$origin_ancestor_term->name;

$headername = $origin_ancestor_term->name;


if ($headername == 'Events') {
    $productparentcat = 'events';
} else {
    $productparentcat = 'adventures';
}

get_header($productparentcat);

奇怪的是,这似乎对我的本地版本起作用,直到我更新了wordpress的版本然后它就破了。我现在也遇到以下错误:

Notice: Undefined offset: 0 (for $c = 1;)
Notice: Trying to get property of non-object (for the $origin_ancestor_term->name;)

有没有人知道在单一产品模板上检索父类别名称的简单方法?我已经看了很多标准的wordpress功能来实现这一点,但它们不适用于woocommerce模板,我想是因为他们使用自定义分类法...

谢谢!

1 个答案:

答案 0 :(得分:0)

在进一步研究这个问题后,我意识到答案非常简单,主要问题是我在错误的地方寻找解决方案。

我开始着眼于寻找产品的想法'类别父ID /名称,但实际上网站上的所有产品都包含在子类和父类别下。

例如,一款名为" Fiesta Special Edition"是在嘉年华和#34;和#34;福特",所以如果我试图寻找父母的类别" Fiesta"使用产品ID它没有用,因为它正在为#34;福特"同时也是最顶级的类别。

这导致我的错误"注意:未定义的偏移量:0(对于$ c = 1;)"。

最后我用了这个:

if ( has_term('Ford', 'product_cat', null) ) {
    get_header('ford');
} else {
    get_header('other-makes');
}



$carclass = '';

if(has_term('Ford', 'product_cat', $post)) {
    $carclass = 'ford';
} else {
    $carclass = 'other-cars';
}

这允许我设置页面样式并根据是否勾选了特定类别来拉入正确的标题。