hôm nay mình nghiên cứu về cái sản phẩm liên quan của Woocommerce, mình thắc mắc tại sao sản phẩm liên quan mà nó hiện tầm bậy, và mình đã tìm ra được nguyên nhân và cách khắc phục
Cách lấy sản phẩm liên quan theo Category và Tag
đúng Woocommerce lấy theo 2 tiêu chí này. Hãy xem function wc_get_related_products
Nó sẽ lấy cả hai trộn vào với nhau, và random ra (có thể tắt)
Ta có thể tắt sản phẩm liên quan theo category bằng cách:
add_filter( 'woocommerce_product_related_posts_relate_by_category', '__return_false' );
tương tự với tag muốn tắt không lấy sản phẩm liên quan theo tag thì
add_filter( 'woocommerce_product_related_posts_relate_by_tag', '__return_false' );
Vấn đề sản phẩm liên quan hiện tầm bậy
tầm bậy ở đây là thấy nó chả liên quan gì với sản phẩm được xem cả. Nguyên nhân là do bạn thường chọn sản phẩm thuộc nhiều danh mục khác nhau. Trong các danh mục đó có danh mục cấp cha rất cao phía trên.
Khi lấy sản phẩm liên quan nó cũng sẽ lấy sản phẩm cha cấp quá cao đó thành ra sản phẩm sẽ ra rất chung chung, và đó là lý do tại sao bạn thấy sản phẩm nó chả liên quan gì tới sản phẩm đang xem.
Cách khắc phục sản phẩm liên quan hiện không đúng
Cách 1: bạn nên chọn sản phẩm ở danh mục con mà thôi. Thì chắc sản phẩm liên quan chỉ lấy trong danh mục con mà hiển thị. Nhưng nếu vì một lý do gì đó, hoặc bạn đã lỡ đặt rất nhiều sản phẩm theo rất nhiều danh mục như vậy thì qua cách 2.
Cách 2: dùng code để lọc tham số danh mục cần lấy cho sản phẩm liên quan, trong code chúng ta sẽ chỉ lấy category của danh mục con, và bỏ hết category danh mục cha. Và đây là đoạn code đó.
/* Mecode: Fix hiển thị sản phẩm liên quan */
function mc_fix_relative_products_by_cat_terms($term_ids, $product_id) {
global $product;
if ( ! $product ) {
return $term_ids;
}
$terms = wc_get_product_terms( $product_id, 'product_cat');
$org = $terms;
$parents = [];
foreach($terms as $term){
if(!empty( $term->parent )) $parents[] = $term->parent;
}
foreach ( $terms as $index => $term ){
if(in_array( $term->term_id, $parents )){
unset($terms[$index]);
}
}
$child_terms = array_map(function($term) {
return $term->term_id;
}, $terms);
return $child_terms;
}
add_filter('woocommerce_get_related_product_cat_terms', 'mc_fix_relative_products_by_cat_terms', 10, 2);
Với một số giải thích và đoạn code trên hi vọng là bạn đã có thể hiển thị đúng sản phẩm liên quan của mình, điều này sẽ giúp khách hàng của bạn có thêm sự lựa chọn tốt hơn khi mua hàng.
Trân trọng cám ơn bạn đã đọc bài.