Woocommerce 在单个 product.php 上获取父 slug/名称

Woocommerce get parent slug / name on single-product.php

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

基本上我只有一个 product.php 页面,我们有一个网站需要不同的页眉/页脚和基于产品所属类别的设计。

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

我确实找到了 this on wordpress.stackexchange,但它对我的需求来说太复杂了,所以我尝试剥离一些代码并直接放在单个 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 模板,我猜是因为它们使用了自定义分类法...

谢谢!

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

我一直想找到产品类别 parent ID / 名称,但实际上网站上的所有产品都包含在 child 和 [=31] 下=] 类别。

例如,名为 "Fiesta Special Edition" 的产品同时在 "Fiesta" 和 "Ford" 下,所以如果我尝试搜索 parent 类别 "Fiesta" 使用产品 ID 它不起作用,因为它也在为 "Ford" 寻找 parent,而那是最高级别的类别。

这就是导致我关于 "Notice: Undefined offset: 0 (for $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';
}

这让我可以设置页面样式并拉入右侧 header 取决于是否勾选了特定类别。