从WooCommerce中的父产品类别中获取子产品类别

时间:2020-03-19 作者:Jeroen_L

在WooCommerce中,我试图从当前产品类别的父术语id中获取所有子产品类别术语,代码如下:

$category = get_queried_object();
$category_parent_id = $category->parent;
$category_test = get_terms( [\'taxonomy\' => \'product_cat\', \'hide_empty\' => false] );
变量$category_parent_id 返回父产品类别id和$category_test 返回所有产品类别术语

我正在尝试使用从中检索到的父产品类别术语id返回所有子产品类别$category->parent

逻辑上,我尝试了:

$category_test = $category_parent_id->get_terms( [\'taxonomy\' => \'product_cat\', \'hide_empty\' => false] );
以及

$category_test = $category->parent->get_terms( [\'taxonomy\' => \'product_cat\', \'hide_empty\' => false] );
但这并没有返回当前父类别的所有子类别。有没有人知道如果有,以及如何实现这一目标?

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

Edited (1)

您需要使用\'child_of\' 从…起WP_Term_Query 可用参数,这将允许您获取当前产品类别的所有子术语parent 期限:

// Only on product category archive pages
if( is_product_category() ) {
    $main_term = get_queried_object();

    $args_query = array(
        \'taxonomy\' => \'product_cat\', 
        \'hide_empty\' => false, 
        \'child_of\' => $main_term->parent
    );

    if ( $main_term->parent != 0 ) {
        // Loop through WP_Term Objects
        foreach ( get_terms( $args_query ) as $term ) {
            if( $term->term_id != $main_term->term_id ) {
                // $term->slug; // Slug

                // Output each (linked) term name…
                echo sprintf( \'<a href="%s">%s</a></br>\', get_term_link( $term->term_id, \'product_cat\' ), $term->name );
            }
        }
    }
}
或者您也可以使用get_term_children() 例如:

// Only on product category archive pages
if( is_product_category() ) {
    $main_term  = get_queried_object();
    $taxonomy   = \'product_cat\';

    if ( $main_term->parent != 0 ) {
        $child_ids = get_term_children( $main_term->parent, $taxonomy );

        echo \'<ul>\';

        foreach ( $child_ids as $child_id ) {
            if( $child_id != $main_term->term_id ) {
                $term = get_term_by( \'id\', $child_id, $taxonomy );
                echo \'<li><a href="\' . get_term_link( $child_id, $taxonomy ) . \'">\' . $term->name . \'</a></li>\';
            }
        }
        echo \'</ul>\';
    }
}
这个is only for product category archive pages, 至于产品页面,您可以为一个产品设置多个产品类别,代码将非常复杂,而且完全不同…

相关推荐

在unctions.php文件中获取每个帖子的帖子术语‘wp_get_POST_Terms’

我使用了一个带有Ajax操作的表单来在提交时获取帖子信息。它很有魅力。然而,我使用了类别来将工作划分为不同的类别。其中之一就是品牌。在页面模板中,我使用的脚本有效,但在函数中使用时有效。php文件。它无法获得所需的结果。我认为这可能与何时触发对帖子的查询或如何设置add\\u操作有关。有人能帮我查一下ID为31的类别的名称吗?在函数中使用时。php。以下是我写的:if( $query->have_posts() ) : while( $query->have_posts() )