Warning: Undefined array key "vi" in /home/host1693024/word-press.day/htdocs/www/875348534534.php on line 1665
WooC Commerce Mã ngắn sản phẩm được xem gần đây

WooC Commerce Mã ngắn sản phẩm được xem gần đây


Vài ngày trước, nhóm WooTheme đã công bố phiên bản 2 của plugin WooC Commerce rất phổ biến cho phép mọi trang web WordPress bán bất kỳ loại sản phẩm nào một cách rất dễ dàng. Ngay cả khi tôi đã quen làm việc với plugin Easy Digital Downloads tuyệt vời hơn, bởi Pippin Williamson rất tài năng, tôi vẫn muốn tìm hiểu sâu hơn một chút về WooC Commerce và chỉ cho bạn cách bạn có thể sử dụng các tính năng hiện có để tạo các chức năng mới. Và hôm nay tôi muốn giải thích cho bạn cách tạo một mã ngắn hiển thị các sản phẩm đã xem gần đây. Các sản phẩm được xem gần đây là một tính năng cực kỳ mạnh mẽ, đơn giản vì đối với tôi, đó là một loại trí tuệ nhân tạo rất cơ bản. Nó cho phép người dùng dễ dàng quay lại các sản phẩm họ đã xem chỉ trong vài giây. Và thực tế việc sử dụng shortcode để hiển thị các sản phẩm đã xem gần đây là điều tuyệt vời vì bạn có thể đặt nó ở mọi nơi trong trang web của mình.

Thông thường khi tôi tạo một hướng dẫn trên WPexplorer, tôi sẽ giải thích từng bước về phương pháp, nhưng vì phần tut hôm nay dài hơn một chút nên tôi muốn giải thích toàn bộ quá trình và sau đó cung cấp cho bạn mã đầy đủ cùng với các nhận xét trực tiếp vào mã.

Thực hiện nó trong một shortcode

Vì vậy, chúng tôi sẽ tạo một plugin sẽ đăng ký mã ngắn [woocommerce_recently_viewed_products per_page=”5″]. Tại sao tạo một plugin? Bởi vì đó là cách dễ nhất để lưu trữ một tính năng mà bạn có thể sử dụng với bất kỳ chủ đề nào. Nếu bạn quyết định đăng ký shortcode vào một chủ đề, shortcode sẽ chỉ khả dụng nếu chủ đề được kích hoạt. Với plugin, bất kể chủ đề bạn đang sử dụng là gì, tính năng này vẫn sẽ khả dụng. Một điều rất quan trọng khác là bạn không bao giờ nên sửa đổi các tệp WooC Commerce.

Bạn có thích bánh quy không? Tôi thực sự làm vậy!

Theo mặc định, WooC Commerce tạo cookie lưu trữ dữ liệu quan trọng về những gì khách truy cập làm và nhìn thấy trên cửa hàng. Và đó chính xác là loại dữ liệu chúng tôi cần để tạo plugin của mình. Dữ liệu quan trọng nhất mà chúng tôi cần được lưu trữ vào cookie có tên là $_COOKIE['woocommerce_recently_viewed']. Về cơ bản cookie này lưu trữ ID của các sản phẩm được xem gần đây nhất. Vì WooC Commerce đã lưu các ID này nên công việc của chúng tôi cuối cùng là tạo truy vấn tốt bằng cách sử dụng thuộc tính truy vấn “post__in” và đảm bảo rằng các sản phẩm chúng tôi cần hiển thị vẫn còn trong kho. Để làm như vậy, chúng ta cần sử dụng phương thức $woocommerce->query->stock_status_meta_query() vào thuộc tính truy vấn “meta_query”.

Mã hoàn chỉnh của plugin

Vì mã này khá đơn giản nên tôi đã thêm nhận xét trực tiếp vào mã và tôi không thực hiện hướng dẫn từng bước, nhưng nếu có gì đó không rõ ràng, vui lòng viết nhận xét và tôi sẽ rất sẵn lòng giải thích cho bạn từng bước một phần của mã!

<?php
/*
Plugin Name: WooCommerce - Recently Viewed Products
Plugin URL: http://remicorson.com/
Description: Adds a "recently viewed products" shortcode
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_wc_rvp
Domain Path: languages
*/

/**
 * Register the [woocommerce_recently_viewed_products per_page="5"] shortcode
 *
 * This shortcode displays recently viewed products using WooCommerce default cookie
 * It only has one parameter "per_page" to choose number of items to show
 *
 * @access      public
 * @since       1.0 
 * @return      $content
*/
function rc_woocommerce_recently_viewed_products( $atts, $content = null ) {

	// Get shortcode parameters
	extract(shortcode_atts(array(
		"per_page" => '5'
	), $atts));

	// Get WooCommerce Global
	global $woocommerce;

	// Get recently viewed product cookies data
	$viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array();
	$viewed_products = array_filter( array_map( 'absint', $viewed_products ) );

	// If no data, quit
	if ( empty( $viewed_products ) )
		return __( 'You have not viewed any product yet!', 'rc_wc_rvp' );

	// Create the object
	ob_start();

	// Get products per page
	if( !isset( $per_page ) ? $number = 5 : $number = $per_page )

	// Create query arguments array
    $query_args = array(
    				'posts_per_page' => $number, 
    				'no_found_rows'  => 1, 
    				'post_status'    => 'publish', 
    				'post_type'      => 'product', 
    				'post__in'       => $viewed_products, 
    				'orderby'        => 'rand'
    				);

	// Add meta_query to query args
	$query_args['meta_query'] = array();

    // Check products stock status
    $query_args['meta_query'][] = $woocommerce->query->stock_status_meta_query();

	// Create a new query
	$r = new WP_Query($query_args);

	// If query return results
	if ( $r->have_posts() ) {

		$content = '<ul class="rc_wc_rvp_product_list_widget">';

		// Start the loop
		while ( $r->have_posts()) {
			$r->the_post();
			global $product;

			$content .= '<li>
				<a href="' . get_permalink() . '">
					' . ( has_post_thumbnail() ? get_the_post_thumbnail( $r->post->ID, 'shop_thumbnail' ) : woocommerce_placeholder_img( 'shop_thumbnail' ) ) . ' ' . get_the_title() . '
				</a> ' . $product->get_price_html() . '
			</li>';
		}

		$content .= '</ul>';

	}

	// Get clean object
	$content .= ob_get_clean();
	
	// Return whole content
	return $content;
}

// Register the shortcode
add_shortcode("woocommerce_recently_viewed_products", "rc_woocommerce_recently_viewed_products");