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 取决于是否勾选了特定类别。
我知道之前有人在这里询问过有关 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 取决于是否勾选了特定类别。