如何显示 WooCommerce 中特定父类下的子类别?
2024-03-02 11:33:39
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 );