2015-07-20 79 views
2

我使用Woocommerce和高级自定义字段来管理产品。我想在子分类页面上显示父分类图像。使用Woocommerce和ACF获取父分类定制字段

其实,我用这个片段来获得分类父页上的图像(它的工作原理):

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

我跟着乔希编辑2它终于工作!我用

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

回答

1

如果你看一下queried_object转储的结果,你应该会看到一个“父”键。

["parent"]=> int(0) 

0代表没有父代,否则代号将是父分类的标识。

所以你想要做的就是这样的事情。

<?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。那么你只需要改变的ID参数上the_field为$ term_id和鲍勃是你的叔叔:)

编辑:

基础上吕西安希望顶级类别,如果我们有超过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); ?>" />

此代码也应该工作外的开箱即用的任何新的自定义分类由于我们没有硬编码分类的名称。一切正在检索是自动的。

+0

如果我想返回,直到它获得顶级父ID,我该怎么办? 会有帮助吗? http://alex.leonard.ie/2011/04/20/wordpress-get-id-of-top-level-parent-category/ –

+0

查看我更新的问题获取我收到的错误。 –

+0

对不起。忘记了我们正在使用定制分类法。我再次更新了我在WooCommerce安装中测试过的新代码,它正在工作。此外,如果您想回显变量,请确保在** while循环之外(最好在它之后)执行此操作。您也必须** print_r ** ** $ cat **变量,因为这将是一个对象而不是一个字符串。 –