使用 Woocommerce 和 ACF 获取父分类自定义字段
Get the parent taxonomy custom field with Woocommerce and ACF
我使用 Woocommerce 和高级自定义字段来管理产品。我想在子分类页面上显示父分类图像。
实际上,我使用此代码段在分类法父页面上获取图像(有效):
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
?>
<img src="<?php the_field('grosse_image_carre', $queried_object); ?>" />
作为参考,这里是每个变量的var_dump:
queried_object
object(stdClass)#5089 (10) { ["term_id"]=> int(341) ["name"]=> string(12) "France Laure" ["slug"]=> string(12) "france-laure" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(341) ["taxonomy"]=> string(11) "product_cat" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(185) ["filter"]=> string(3) "raw" }
分类学
string(11) "product_cat"
term_id
int(341)
我的问题:如何在子类页面上获取父类图片?
参考:Get values from a taxonomy term
编辑
我尝试了建议的解决方案并使用了这个完整的代码:
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$parent = $queried_object->parent;
echo 'parent: '.$parent.'<br />';
while($parent) {
$cat = get_category($parent);
echo 'Cat: '.$cat.'<br />';
$parent = $cat->category_parent; // Line 30
echo 'parent: '.$parent.'<br />';
$term_id = $cat->cat_ID; // Line 32
echo 'term_id: '.$term_id.'<br />';
}
}
?>
但是我得到了
parent: 359
Cat:
Notice: Trying to get property of non-object in ...woocommerce\subcat-archive-product.php on line 30
parent:
Notice: Trying to get property of non-object in E...woocommerce\subcat-archive-product.php on line 32
term_id:
编辑 2
我关注了 Josh Edit 2,终于成功了!我用
<img src="<?php the_field('grosse_image_carre', 'product_cat_'.$term_id); ?>" />
如果您查看 queried_object 转储的结果,您应该会看到一个 "parent" 键。
["parent"]=> int(0)
0 表示没有父分类,否则数字将是父分类的 ID。
所以你想做的是这样的。
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$term_id = $queried_object->parent;
}
?>
<img src="<?php the_field('grosse_image_carre', $term_id); ?>" />
所以我们首先获取 queried_object,并将 $term_id 变量设置为它的 ID。然后我们检查是否设置了父键(0 表示 false),如果有,则将 $term_id 设置为父 ID 而不是查询对象的 ID。然后你只需将 the_field 上的 ID 参数更改为 $term_id 并且 bob 是你的叔叔:)
编辑:
根据 Lucien 想要顶级类别的更新信息,如果我们超过 1 个父级深度:
if($queried_object->parent) {
$parent = $queried_object->parent;
while($parent) {
$cat = get_category($parent);
$parent = $cat->category_parent;
$term_id = $cat->cat_ID;
}
}
现在 $term_id 设置为顶级类别 ID。
编辑 2:
虽然上面的代码适用于常规的 WordPress 类别,但我忘记了我们想要使用自定义分类法(在本例中为 WooCommerce product_cat 分类法。)
考虑到这一点,这是代码。我已经在 WooCommerce 安装上测试了这个,有 4 个深类别,它返回了最上面的类别。
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$parent = $queried_object->parent;
while($parent) {
$cat = get_term($parent, $taxonomy);
$parent = $cat->parent;
$term_id = $cat->term_id;
}
}
和以前一样,您将在 ACF 函数中使用 $term_id 来检索图像。
<img src="<?php the_field('grosse_image_carre', $queried_object); ?>" />
由于我们没有对分类法的名称进行硬编码,因此该代码也应该开箱即用地适用于任何新的自定义分类法。检索的所有内容都是自动的。
我使用 Woocommerce 和高级自定义字段来管理产品。我想在子分类页面上显示父分类图像。
实际上,我使用此代码段在分类法父页面上获取图像(有效):
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
?>
<img src="<?php the_field('grosse_image_carre', $queried_object); ?>" />
作为参考,这里是每个变量的var_dump:
queried_object
object(stdClass)#5089 (10) { ["term_id"]=> int(341) ["name"]=> string(12) "France Laure" ["slug"]=> string(12) "france-laure" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(341) ["taxonomy"]=> string(11) "product_cat" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(185) ["filter"]=> string(3) "raw" }
分类学
string(11) "product_cat"
term_id
int(341)
我的问题:如何在子类页面上获取父类图片?
参考:Get values from a taxonomy term
编辑
我尝试了建议的解决方案并使用了这个完整的代码:
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$parent = $queried_object->parent;
echo 'parent: '.$parent.'<br />';
while($parent) {
$cat = get_category($parent);
echo 'Cat: '.$cat.'<br />';
$parent = $cat->category_parent; // Line 30
echo 'parent: '.$parent.'<br />';
$term_id = $cat->cat_ID; // Line 32
echo 'term_id: '.$term_id.'<br />';
}
}
?>
但是我得到了
parent: 359
Cat:
Notice: Trying to get property of non-object in ...woocommerce\subcat-archive-product.php on line 30
parent:
Notice: Trying to get property of non-object in E...woocommerce\subcat-archive-product.php on line 32
term_id:
编辑 2
我关注了 Josh Edit 2,终于成功了!我用
<img src="<?php the_field('grosse_image_carre', 'product_cat_'.$term_id); ?>" />
如果您查看 queried_object 转储的结果,您应该会看到一个 "parent" 键。
["parent"]=> int(0)
0 表示没有父分类,否则数字将是父分类的 ID。
所以你想做的是这样的。
<?php
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$term_id = $queried_object->parent;
}
?>
<img src="<?php the_field('grosse_image_carre', $term_id); ?>" />
所以我们首先获取 queried_object,并将 $term_id 变量设置为它的 ID。然后我们检查是否设置了父键(0 表示 false),如果有,则将 $term_id 设置为父 ID 而不是查询对象的 ID。然后你只需将 the_field 上的 ID 参数更改为 $term_id 并且 bob 是你的叔叔:)
编辑:
根据 Lucien 想要顶级类别的更新信息,如果我们超过 1 个父级深度:
if($queried_object->parent) {
$parent = $queried_object->parent;
while($parent) {
$cat = get_category($parent);
$parent = $cat->category_parent;
$term_id = $cat->cat_ID;
}
}
现在 $term_id 设置为顶级类别 ID。
编辑 2:
虽然上面的代码适用于常规的 WordPress 类别,但我忘记了我们想要使用自定义分类法(在本例中为 WooCommerce product_cat 分类法。)
考虑到这一点,这是代码。我已经在 WooCommerce 安装上测试了这个,有 4 个深类别,它返回了最上面的类别。
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
if($queried_object->parent) {
$parent = $queried_object->parent;
while($parent) {
$cat = get_term($parent, $taxonomy);
$parent = $cat->parent;
$term_id = $cat->term_id;
}
}
和以前一样,您将在 ACF 函数中使用 $term_id 来检索图像。
<img src="<?php the_field('grosse_image_carre', $queried_object); ?>" />
由于我们没有对分类法的名称进行硬编码,因此该代码也应该开箱即用地适用于任何新的自定义分类法。检索的所有内容都是自动的。