在 WooCommerce 中列出产品类别的主要产品子类别
List main product subcategories of a product category in WooCommerce
我有一个名为“产品类型”的 WooCommerce 产品类别,我试图列出其下的所有类别,但不是这些类别的子类别。例如,我有:
- 产品类型
- 硬质合金铣刀
- 钓鱼工具
- 子类别
我希望它列出“硬质合金铣刀”和“打鱼工具”,而不是“儿童类别”。
这是我的代码:
<ul>
<?php $terms = get_terms(
array(
'taxonomy' => 'product_cat',
'hide_empty' => false,
'child_of' => 32,
'post__not_in' => 25,
'depth' => 1,
'include_children' => false,
)
);
// Check if any term exists
if ( ! empty( $terms ) && is_array( $terms ) ) {
// Run a loop and print them all
foreach ( $terms as $term ) { ?>
<a href="<?php echo esc_url( get_term_link( $term ) ) ?>">
<li data-mh="234908ju243">
<?php echo $term->name; ?>
</li>
</a><?php
}
} ?>
</ul>
但它仍然返回“子类别”。我不确定为什么将深度限制为“1”并将 'include_children' 设置为 'false' 并不能解决问题。
您应该需要将参数 parent
与您的“产品类型”术语 ID 一起使用,以获得直接子术语 (子类别),如下所示:
<ul>
<?php
// Get the WP_Term object for "Product Types" product category (if needed)
$parent_term = get_term_by('name', 'Product Types', 'product_cat' )->term_id;
// Display "Product Types" category
echo' <a href="' . esc_url( get_term_link( $parent_term ) ) . '">' . $parent_term->name . '</a><br>';
// Get main direct subcategories
$terms = get_terms( array(
'taxonomy' => 'product_cat',
'hide_empty' => false,
'parent' => $parent_term->term_id,
) );
// Check if any term exists
if ( ! empty( $terms ) && is_array( $terms ) ) {
// Loop through each term and print them all
foreach ( $terms as $term ) {
echo '<li data-mh="234908ju243">
<a href="' . esc_url( get_term_link( $term ) ) . '">' . $term->name . '</a>
</li>';
}
} ?>
</ul>
应该可以。
我稍微更改了您的 html 结构,因为 <a>
标签需要位于 <li>
标签内。
我有一个名为“产品类型”的 WooCommerce 产品类别,我试图列出其下的所有类别,但不是这些类别的子类别。例如,我有:
- 产品类型
- 硬质合金铣刀
- 钓鱼工具
- 子类别
我希望它列出“硬质合金铣刀”和“打鱼工具”,而不是“儿童类别”。
这是我的代码:
<ul>
<?php $terms = get_terms(
array(
'taxonomy' => 'product_cat',
'hide_empty' => false,
'child_of' => 32,
'post__not_in' => 25,
'depth' => 1,
'include_children' => false,
)
);
// Check if any term exists
if ( ! empty( $terms ) && is_array( $terms ) ) {
// Run a loop and print them all
foreach ( $terms as $term ) { ?>
<a href="<?php echo esc_url( get_term_link( $term ) ) ?>">
<li data-mh="234908ju243">
<?php echo $term->name; ?>
</li>
</a><?php
}
} ?>
</ul>
但它仍然返回“子类别”。我不确定为什么将深度限制为“1”并将 'include_children' 设置为 'false' 并不能解决问题。
您应该需要将参数 parent
与您的“产品类型”术语 ID 一起使用,以获得直接子术语 (子类别),如下所示:
<ul>
<?php
// Get the WP_Term object for "Product Types" product category (if needed)
$parent_term = get_term_by('name', 'Product Types', 'product_cat' )->term_id;
// Display "Product Types" category
echo' <a href="' . esc_url( get_term_link( $parent_term ) ) . '">' . $parent_term->name . '</a><br>';
// Get main direct subcategories
$terms = get_terms( array(
'taxonomy' => 'product_cat',
'hide_empty' => false,
'parent' => $parent_term->term_id,
) );
// Check if any term exists
if ( ! empty( $terms ) && is_array( $terms ) ) {
// Loop through each term and print them all
foreach ( $terms as $term ) {
echo '<li data-mh="234908ju243">
<a href="' . esc_url( get_term_link( $term ) ) . '">' . $term->name . '</a>
</li>';
}
} ?>
</ul>
应该可以。
我稍微更改了您的 html 结构,因为 <a>
标签需要位于 <li>
标签内。