Hướng dẫn hiển thị sản phẩm đã xem trong Woocommerce

26 Tháng sáu, 2024
(1 đánh giá)

Woocommerce có sẵn hook hay Widget hỗ trợ hiển thị sản phẩm đã xem nhưng giao diện thì có thể không theo ý bản thân hay không phù hợp với theme các bạn. Ở bài viết này mình sẽ nói rõ và fix 1 số lỗi mà các bạn gặp phải dù đã setup giống với các bài hướng dẫn ở nơi khác.

Hiển thị sản phẩm đã xem

Đoạn code dưới đây giúp các bạn hiển thị 5 bài viết với giao diện để theo đường dẫn template-parts/content với tiêu đề SẢN PHẨM VỪA XEM:

<?php 
global $woocommerce;
$viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array();
$viewed_products = array_filter( array_map( 'absint', $viewed_products ) );
?>
<?php 
$query_args = array(
	'posts_per_page' => 5, // Hiển thị số lượng sản phẩm đã xem
	'post_status'    => 'publish', 
	'post_type'      => 'product', 
	'post__in'       => $viewed_products, 
	'orderby'        => 'rand'
);
$query_args['meta_query'] = array();
$query_args['meta_query'][] = $woocommerce->query->stock_status_meta_query();
$r = new WP_Query($query_args);
if ( $r->have_posts() ) {
	?>
	<div class="giniit-title"> 
		<h2>SẢN PHẨM VỪA XEM</h2>  
	</div>
	<?php 
	while ( $r->have_posts() ) { $r->the_post();
		get_template_part( 'template-parts/content', get_post_type() ); // Giao diện hiển thị theo ý bạn muốn
	}
}; 
wp_reset_postdata();
?>

Set cookies

Hẳn vậy, có một việc mình phát hiện ra cookies của Woo chỉ setcho Widget (Sản phẩm vừa xem), đó là lý do mà ngay cả khi bạn copy đoạn code trên mạng từ các trang khác dưới dạng Shortcode hay Query tương tự mình thì đa phần sẽ hiển thị sai. Để giải quyết vấn đề đó, các bạn giúp mình copy đoạn code sau cho vào file functions.php:

function giniit_track_product_view() {
	if ( ! is_singular( 'product' ) ) {
		return;
	}
	global $post;
	if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) )
		$viewed_products = array();
	else
		$viewed_products = (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] );
	if ( ! in_array( $post->ID, $viewed_products ) ) {
		$viewed_products[] = $post->ID;
	}
	if ( sizeof( $viewed_products ) > 15 ) {
		array_shift( $viewed_products );
	}
	wc_setcookie( 'woocommerce_recently_viewed', implode( '|', $viewed_products ) );
}
add_action( 'template_redirect', 'giniit_track_product_view', 20 );
Kết quả
Kết quả
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Tin tức liên quan
Hướng dẫn thêm Confirm Password trong Registration Page và Checkout Page
Tình trạng spam tài khoản, hay khách hàng không nghiêm túc trong việc tạo tài khoản để spam đơn hàng. Mình khuyến khích các bạn thêm một field nhập...
Hướng dẫn tạo sản phẩm Woocommerce có biến thể đẹp mắt
Mình đọc bình luận thấy khá nhiều bạn kêu gặp khó khăn trong vấn đề tạo sản phẩm có biến thể, hay sản phẩm có biến thể không được...
Hướng dẫn lấy đường dẫn các page Woocommerce 3.x
Chắc hẳn ai dùng Woocommerce đều sẽ muốn hiển thị đường dẫn của trang tài khoản, cửa hàng, thanh toán, giỏ hàng,.. Có rất nhiều phương án xử lý...