Recherche de site Web

Shortcode des produits récemment consultés WooCommerce


Il y a quelques jours, l'équipe WooThemes a annoncé la version 2 du très populaire plugin WooCommerce qui permet à chaque site WordPress de vendre très facilement tout type de produits. Même si je suis plus habitué à travailler avec le génial plugin Easy Digital Downloads, du très talentueux Pippin Williamson, j'avais envie d'approfondir un peu WooCommerce et de vous montrer comment utiliser les fonctionnalités existantes pour créer de nouvelles fonctions. Et aujourd'hui, j'aimerais vous expliquer comment créer un shortcode qui affiche les produits récemment consultés. Les produits récemment consultés constituent une fonctionnalité incroyablement puissante simplement parce qu’il s’agit, pour moi, d’une sorte d’intelligence artificielle très basique. Il permet aux utilisateurs de revenir facilement aux produits qu’ils ont déjà consultés en quelques secondes seulement. Et le fait d’utiliser un shortcode pour afficher les produits récemment consultés est génial car vous pouvez le placer partout sur votre site internet.

Normalement lorsque je crée un tutoriel sur WPexplorer j'explique étape par étape la méthode, mais comme le tutoriel d'aujourd'hui est un peu plus long, je préfère vous expliquer l'ensemble du processus et ensuite vous fournir le code complet avec des commentaires directement dans le code.

Le faire dans un shortcode

Nous allons donc créer un plugin qui enregistrera un shortcode [woocommerce_recently_viewed_products per_page=”5″]. Pourquoi créer un plugin ? Parce que c’est le moyen le plus simple de stocker une fonctionnalité que vous pouvez utiliser avec n’importe quel thème. Si vous décidez d'enregistrer un shortcode dans un thème, le shortcode ne sera disponible que si le thème est activé. Avec un plugin, quel que soit le thème que vous utilisez, la fonctionnalité sera toujours disponible. Une autre chose très importante est que vous ne devez jamais modifier les fichiers WooCommerce.

Aimez-vous les cookies? Je fais vraiment!

Par défaut, WooCommerce crée un cookie qui stocke des données importantes sur ce qu'un visiteur fait et voit sur la boutique. Et c’est exactement le type de données dont nous avons besoin pour créer notre plugin. Les données les plus importantes dont nous avons besoin sont stockées dans un cookie appelé $_COOKIE['woocommerce_recently_viewed']. Fondamentalement, ce cookie stocke l'ID des derniers produits consultés. Comme WooCommerce enregistre déjà ces identifiants, notre travail consiste enfin à créer la bonne requête en utilisant l'attribut de requête « post__in » et à nous assurer que les produits que nous devons afficher sont toujours en stock. Pour ce faire, nous devons utiliser la méthode $woocommerce->query->stock_status_meta_query() dans l'attribut de requête « meta_query ».

Le code complet du plugin

Comme le code est assez simple, j'ai ajouté les commentaires directement dans le code, et je n'ai pas fait de tutoriel étape par étape, mais si quelque chose n'est pas clair, écrivez un commentaire et je serai plus qu'heureux de vous expliquer chacun. une partie du code !

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