首页 文章

使用Woocommerce和ACF获取父分类自定义字段

提问于
浏览
2

我使用Woocommerce和Advanced Custom Fields来管理产品 . 我想 show a parent taxonomy image on sub-taxonomy pages .

实际上,我使用这个片段来获取分类学父页面上的图像(它可以工作):

<?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" }

taxonomy

string(11) "product_cat"

term_id

int(341)

我的问题:当我在子类别页面上时,如何获取父类别图像?

参考:Get values from a taxonomy term

EDIT

我尝试了提出的解决方案,并使用了这个完整的代码:

<?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.'
'; while($parent) { $cat = get_category($parent); echo 'Cat: '.$cat.'
'; $parent = $cat->category_parent; // Line 30 echo 'parent: '.$parent.'
'; $term_id = $cat->cat_ID; // Line 32 echo 'term_id: '.$term_id.'
'; } } ?>

但是我得到了

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:

EDIT 2

我跟着乔什编辑2,它终于工作了!我用

<img src="<?php the_field('grosse_image_carre', 'product_cat_'.$term_id); ?>" />

1 回答

  • 1

    如果查看queried_object转储的结果,您应该看到“父”键 .

    ["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改为你的叔叔:)

    EDIT:

    基于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 .

    EDIT 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); ?>" />

    由于我们没有对分类法的名称进行硬编码,因此该代码也应该与任何新的自定义分类法一起开箱即用 . 检索的所有内容都是自动的 .

相关问题