WooCommerce-显示特定父项的产品子类别

时间:2013-10-04 作者:tjwillems

我想编辑以下代码:

<?php if ( (!$theretailer_theme_options[\'category_listing\']) || ($theretailer_theme_options[\'category_listing\'] == 0) ) { ?>
        <!-- Show only the first category-->
        <?php $gbtr_product_cats = strip_tags($product->get_categories(\'|||\', \'\', \'\')); //Categories without links separeted by ||| ?>
        <h3><a href="<?php the_permalink(); ?>"><?php list($firstpart) = explode(\'|||\', $gbtr_product_cats); echo $firstpart; ?></a></h3>
        <?php } ?>
示例:http://tjwillems.nl/priveekollektie/product-category/artists/reinier-bosch/

产品图片下的红色标题只需显示“艺术家”的子类别。例如,仅“Reinier Bosch”而非“Lighting”

谁能帮帮我吗?

Greetz,Tom

3 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

woocommerce功能get_categories() 在中声明abstract-wc-product.php, 因为它基于wordpress函数get_the_term_list() 无法仅获取类别的特定分支。这绝对不同于wordpress函数get_categories(), 通过它的使用方式,可以看出它是woocommerce特有的$product->get_categories(). 当然,除了可以使用的论点之间的明显差异之外,您还可以更深入地阅读和比较链接的信息


典型的分类轴系树(categoryTaxonomy tree):

product_cat
    |
    |––cat1  
    |   |––child1.1  
    |   |––child1.2  
    |   |––child1.3  
    |
    |––cat2  
        |––child2.1  
        |––child2.2  
        |––child2.3  
在您的情况下,分支将是»artist«和»art«,而不是»cat1«和»cat2«。目标是只获取要显示的标题的一个相关类别分支。至少下面的代码将实现这一点。

正如我上面所说的,如果您想实现仅从类别/分类法的特定分支获取术语,您必须以不同的方式来实现。你必须利用get_terms()wp_get_post_terms() 然后将结果相交。

//woocommerce product category
$taxonomies = array( \'product_cat\' );

//let\'s get an array with ids of all the terms a post has  
$post_tids = wp_get_post_terms($post->ID, \'product_cat\', array("fields" => "ids"));

//you have to change branch parent id accordingly
$id_branch_parent = \'111\';
$args = array(
    \'fields\' => \'ids\',
    \'child_of\' => $id_branch_parent
);
//let\'s get an array with ids of all the terms a the branch has  
$branch_tids = get_terms( $taxonomies, $args );

//intersect post and branch terms to get an array of common ids
$pnb_tids = array_intersect($post_tids, $branch_tids);

//in case of multiple ids we have to loop through them
foreach ( $pnb_tids as $tid ) {
    //get the term information by id
    $tobj = get_term_by(\'id\', $tid, \'product_cat\');
    //store the term names into an array
    $pnb_name_arr[] = $tobj->name;
}

//implode the name array, this is the result you want to echo
$pnb_term_list = implode(\' – \', $pnb_name_arr);
这应该会给你想要的结果,但它还没有经过测试。

SO网友:pl4g4

您可以注释掉此部分

    <h3><a href="<?php the_permalink(); ?>"><?php list($firstpart) = explode(\'|||\', $gbtr_product_cats); echo $firstpart; ?></a></h3>
添加到html。。。。

例如,您还可以使用CSS隐藏h3

<style> .product_item h3 {display: none !important;} </style>
您可以添加到css中。

这样一来,“红色”文本将消失,而u只会有其他文本。

SO网友:Muhammad Rehman

下面是从特定父id显示产品子类别的最简单方法

$parent_id = 12;    // parent category id
// Get child categories from parent id
$get_child_category = get_terms(\'product_cat\',array(\'child_of\' => $parent_id));
// Filter products from child category
foreach($get_child_category as $child_category){
    $args = array(
        \'post_type\' => \'product\',
        \'posts_per_page\' => 10,
        \'product_cat\' => $child_category->slug,
        \'order\' => \'DESC\',
    );
}

结束

相关推荐

Get_the_Categories筛选器返回空数组

我正在开发一个主题,使用get_the_category_list() 函数(在category template.php中)。通过检查其代码,此函数调用get_the_category() 函数(位于category template.php中),该函数应用get_the_categories 末端过滤器:return apply_filters( \'get_the_categories\', $categories ); 出于某种奇怪的原因,此过滤器返回一个空数组。如果我将此行替换为:re