Trong Woo, tính năng “Sản phẩm tương tự” (Related Products) thường lấy theo tất cả danh mục mà sản phẩm đang gắn. Điều này dẫn đến việc gợi ý sản phẩm không thật sự liên quan, nhất là khi bạn có hệ thống danh mục theo dạng cây cha → con → cháu.
Ví dụ:
- Danh mục: A > A1
- Sản phẩm nằm trong A1
Nhưng Woo lại gợi ý cả sản phẩm thuộc A, khiến kết quả thiếu chính xác và giảm hiệu quả chuyển đổi.
Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.
Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều
- Azdigi: Giá rẻ thì dùng gói Pro Gold Hosting còn chất lượng hơn thì em khuyên dùng Business Hosting. Có điều kiện thì lên VPS nhé
- Tino hosting
- iNet
- Nước ngoài thì Vultr
Trong bài viết này, chúng ta sẽ tối ưu lại cơ chế chọn category, để liên kết sản phẩm chỉ theo danh mục con sâu nhất (leaf category). Việc này giúp:
- Tăng độ liên quan của sản phẩm gợi ý
- Tăng tỷ lệ xem thêm sản phẩm
- Tăng tỷ lệ chuyển đổi đơn hàng

Code chỉ lấy theo danh mục con sâu nhất
Bạn chỉ cần chèn đoạn code sau vào wp-content/themes/{your-theme}/functions.php là xong nhé
/**
* Author: levantoan.com
* Chỉ trả về các category con sâu nhất (leaf) của sản phẩm.
* Ví dụ A > A1 thì chỉ còn A1; nếu SP gắn A > A1 và B > B2 > B3 thì trả về [A1, B3].
*/
add_filter('woocommerce_get_related_product_cat_terms', function( $term_ids, $product_id ) {
if ( empty( $term_ids ) || is_wp_error( $term_ids ) ) {
return $term_ids;
}
$term_ids = array_unique( array_map( 'intval', (array) $term_ids ) );
if ( count( $term_ids ) === 1 ) {
return $term_ids;
}
$term_map = array_flip( $term_ids );
$ancestors = [];
foreach ( $term_ids as $tid ) {
$ancs = get_ancestors( $tid, 'product_cat', 'taxonomy' );
foreach ( $ancs as $anc_id ) {
if ( isset( $term_map[$anc_id] ) ) {
$ancestors[$anc_id] = true;
}
}
}
$leaf_ids = [];
foreach ( $term_ids as $tid ) {
if ( ! isset( $ancestors[$tid] ) ) {
$leaf_ids[] = $tid;
}
}
return ! empty( $leaf_ids ) ? $leaf_ids : $term_ids;
}, 10, 2);
Okie dc rồi. Nhớ clear cache và thử xem kết quả nhé!
- Bình luận



