返回

如何显示 WooCommerce 中特定父类下的子类别?

php

WooCommerce:优化产品导航:显示特定父类下的子类别

作为电子商务网站的基石,产品分类对于改善客户体验和网站优化至关重要。WooCommerce 作为 WordPress 中流行的电子商务插件,提供了强大的分类管理功能。本文旨在指导您如何使用 WooCommerce 显示特定父类下的产品子类别,并通过永久链接和 HTML 元素进行美化。

获取子类别

要获取特定父类下的产品子类别,我们将使用 get_terms() 函数,并指定 child_of 参数:

$parent = 21;
$args = array(
    'fields' => 'ids',
    'child_of' => $parent
);
$branch_ids = get_terms( 'product_cat', $args );

与当前产品类别求交集

接下来,我们需要找出当前产品所属类别和子类别的交集,以确保只显示相关子类别:

$term_id = wp_get_post_terms(get_the_ID(), $taxonomy, array("fields" => "ids"));
$intersect_ids = array_intersect($term_id, $branch_ids);

创建链接并添加 HTML

获取交集子类别后,可以创建链接并将其包裹在 HTML 元素中:

$name_arr = array();
foreach ( $intersect_ids as $tid ) {
    $tobj = get_term_by('id', $tid, 'product_cat');
    $name_arr[] = '<a href="' . get_term_link($tid) . '">' . $tobj->name . '</a>';
}

$term_list = implode(', ', $name_arr);
echo '<h1>' . $term_list . '</h1>';

代码示例

将上述代码添加到 WooCommerce 的 woocommerce_single_product_summary 动作中:

add_action( 'woocommerce_single_product_summary', 'wpse124955_test', 99 );
function wpse124955_test() {
    $taxonomy = 'product_cat';
    $parent = 21;
    $args = array(
        'fields' => 'ids',
        'child_of' => $parent
    );
    $branch_ids = get_terms( $taxonomy, $args );
    $term_id = wp_get_post_terms(get_the_ID(), $taxonomy, array("fields" => "ids"));
    $intersect_ids = array_intersect($term_id, $branch_ids);
    $name_arr = array();
    foreach ( $intersect_ids as $tid ) {
        $tobj = get_term_by('id', $tid, 'product_cat');
        $name_arr[] = '<a href="' . get_term_link($tid) . '">' . $tobj->name . '</a>';
    }
    $term_list = implode(', ', $name_arr);
    echo '<h1>' . $term_list . '</h1>';
}

结论

通过使用 get_terms() 函数和对交集的计算,我们可以轻松获取特定父类下的产品子类别。通过添加永久链接和 HTML 元素,子类别可以作为链接显示在页面上,并可以使用 CSS 进行样式自定义。这将极大地增强网站的导航性和用户体验。

常见问题解答

  • 如何为子类别添加自定义样式?
    您可以使用 CSS 为子类别链接添加自定义样式。例如,为链接添加红色文本:

    .subcategory-links a {
        color: red;
    }
    
  • 我无法获得子类别。是什么原因?
    请确保您使用的是正确的父类 ID。您还应该检查您的分类法是否设置正确。

  • 我可以显示不同级别的子类别吗?
    是的,您可以通过调整 child_of 参数来显示不同级别的子类别。

  • 我如何获取所有子类别的列表,而不仅仅是交集?
    您可以使用以下代码获取所有子类别的列表:

    $all_branch_ids = get_terms( $taxonomy, array(
        'fields' => 'ids',
        'child_of' => $parent,
        'hide_empty' => false
    ) );
    
  • 我如何限制显示的子类别数量?
    您可以使用以下代码限制显示的子类别数量:

    $args = array(
        'fields' => 'ids',
        'child_of' => $parent,
        'number' => 5
    );
    $branch_ids = get_terms( $taxonomy, $args );