Kode Pendek Produk WooCommerce yang Baru Dilihat


Beberapa hari yang lalu, tim WooThemes mengumumkan versi 2 dari plugin WooCommerce yang sangat populer yang memungkinkan setiap situs WordPress menjual segala jenis produk dengan sangat mudah. Meskipun saya lebih terbiasa bekerja dengan plugin Easy Digital Downloads yang mengagumkan, oleh Pippin Williamson yang sangat berbakat, saya ingin mempelajari lebih dalam tentang WooCommerce dan menunjukkan kepada Anda bagaimana Anda dapat menggunakan fitur yang ada untuk membuat fungsi baru. Dan hari ini saya ingin menjelaskan cara membuat kode pendek yang menampilkan produk yang baru-baru ini dilihat. Produk yang baru-baru ini dilihat adalah fitur yang sangat hebat karena, bagi saya, ini merupakan kecerdasan buatan yang sangat mendasar. Hal ini memungkinkan pengguna untuk dengan mudah kembali ke produk yang telah mereka lihat hanya dalam hitungan detik. Dan fakta menggunakan kode pendek untuk menampilkan produk yang baru dilihat adalah hal yang bagus karena Anda dapat menempatkannya di mana saja di situs web Anda.

Biasanya ketika saya membuat tutorial di WPexplorer saya menjelaskan metode langkah demi langkah, tetapi karena tutorial hari ini sedikit lebih panjang, saya lebih suka menjelaskan keseluruhan proses dan kemudian memberi Anda kode lengkap dengan komentar langsung ke dalam kode.

Melakukannya dalam kode pendek

Jadi, kita akan membuat plugin yang akan mendaftarkan kode pendek [woocommerce_recently_viewed_products per_page=”5″]. Mengapa membuat plugin? Karena ini cara termudah untuk menyimpan fitur yang dapat Anda gunakan dengan tema apa pun. Jika Anda memutuskan untuk mendaftarkan kode pendek ke dalam suatu tema, kode pendek hanya akan tersedia jika tema tersebut diaktifkan. Dengan plugin, apa pun tema yang Anda gunakan, fitur tersebut akan tetap tersedia. Hal lain yang sangat penting adalah Anda tidak boleh memodifikasi file WooCommerce.

Apakah kamu suka kue? Saya benar-benar!

Secara default, WooCommerce membuat cookie yang menyimpan data penting tentang apa yang dilakukan dan dilihat pengunjung di toko. Dan itulah jenis data yang kita perlukan untuk membuat plugin kita. Data terpenting yang kami perlukan disimpan ke dalam cookie yang disebut $_COOKIE[‘woocommerce_recently_viewed’]. Pada dasarnya cookie ini menyimpan ID produk yang terakhir dilihat. Karena WooCommerce sudah menyimpan ID ini, tugas kita akhirnya adalah membuat kueri yang baik menggunakan atribut kueri “post__in” dan memastikan bahwa produk yang perlu kami tampilkan masih tersedia. Untuk melakukannya, kita perlu menggunakan metode $woocommerce->query->stock_status_meta_query() ke dalam atribut kueri “meta_query”.

Kode lengkap plugin

Karena kodenya cukup sederhana, saya menambahkan komentar langsung ke dalam kode, dan saya tidak melakukan tutorial langkah demi langkah, tetapi jika ada yang kurang jelas silakan tulis komentar dan saya akan dengan senang hati menjelaskannya kepada Anda masing-masing. bagian dari kode!

<?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");