Sản Phẩm Liên Quan Hiện Tầm Bậy Trong Woocommerce

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.

Ví dụ như sau: Bạn có sản phẩm nhưng check nó ở nhiều cấp độ danh mục khác nhau.

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.

Đặng Ngọc Bình
Đặng Ngọc Bình

Một lập trình viên ôm full stack, một freelancer, một người thích chia sẻ về kỹ thuật lập trình từ MeCode

Articles: 14
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x