Warning: Undefined array key "pl" in /home/host1693024/word-press.day/htdocs/www/875348534534.php on line 1655
WooCommerce Ostatnio oglądane produkty Krótki kod

WooCommerce Ostatnio oglądane produkty Krótki kod


Kilka dni temu zespół WooThemes ogłosił wersję 2 bardzo popularnej wtyczki WooCommerce, która pozwala każdej witrynie WordPress na bardzo łatwą sprzedaż dowolnego rodzaju produktów. Nawet jeśli jestem bardziej przyzwyczajony do pracy z niesamowitą wtyczką Easy Digital Downloads autorstwa bardzo utalentowanego Pippina Williamsona, chciałem wejść nieco głębiej w WooCommerce i pokazać, jak możesz wykorzystać istniejące funkcje do tworzenia nowych. A dzisiaj chciałam Wam wytłumaczyć jak stworzyć krótki kod wyświetlający ostatnio oglądane produkty. Ostatnio oglądane produkty to niezwykle potężna funkcja, ponieważ dla mnie jest to rodzaj bardzo podstawowej sztucznej inteligencji. Dzięki temu użytkownicy mogą w ciągu kilku sekund łatwo wrócić do produktów, które już oglądali. A fakt wykorzystania krótkiego kodu do wyświetlania ostatnio oglądanych produktów jest świetny, ponieważ możesz umieścić go w dowolnym miejscu na swojej stronie.

Zwykle, gdy tworzę tutorial na WPexplorer, wyjaśniam krok po kroku metodę, ale ponieważ dzisiejszy tutorial jest nieco dłuższy, wolę wyjaśnić cały proces, a następnie udostępnić pełny kod z komentarzami bezpośrednio w kodzie.

Robi to w krótkim kodzie

Dlatego stworzymy wtyczkę, która zarejestruje krótki kod [woocommerce_recently_viewed_products per_page=”5″]. Po co tworzyć wtyczkę? Ponieważ jest to najłatwiejszy sposób przechowywania funkcji, której można używać z dowolnym motywem. Jeśli zdecydujesz się zarejestrować krótki kod w motywie, krótki kod będzie dostępny tylko wtedy, gdy motyw jest aktywowany. Dzięki wtyczce, niezależnie od motywu, którego używasz, funkcja będzie nadal dostępna. Kolejną bardzo ważną rzeczą jest to, że nigdy nie powinieneś modyfikować plików WooCommerce.

Lubisz ciasteczka? Naprawdę!

Domyślnie WooCommerce tworzy plik cookie, który przechowuje ważne dane o tym, co odwiedzający robi i widzi w sklepie. I właśnie takich danych potrzebujemy, aby stworzyć naszą wtyczkę. Najważniejsze dane, których potrzebujemy, są przechowywane w plikach cookie o nazwie $_COOKIE[‚woocommerce_recently_viewed’]. Zasadniczo ten plik cookie przechowuje identyfikator ostatnio oglądanych produktów. Ponieważ WooCommerce zapisuje już te identyfikatory, naszym zadaniem jest w końcu utworzyć dobre zapytanie przy użyciu atrybutu zapytania „post__in” i upewnić się, że produkty, które chcemy wyświetlić, są nadal dostępne. Aby to zrobić, musimy użyć metody $woocommerce->query->stock_status_meta_query() w atrybucie zapytania „meta_query”.

Kompletny kod wtyczki

Ponieważ kod jest dość prosty, dodałem komentarze bezpośrednio do kodu i nie zrobiłem samouczka krok po kroku, ale jeśli coś jest nie jasne, napisz komentarz, a z przyjemnością wyjaśnię każdy z nich część kodu!

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