WooCommerce-Shortcode für kürzlich angesehene Produkte
Vor ein paar Tagen hat das WooThemes-Team Version 2 des sehr beliebten WooCommerce-Plugins angekündigt, mit dem jede einzelne WordPress-Website ganz einfach Produkte aller Art verkaufen kann. Auch wenn ich es eher gewohnt bin, mit dem großartigen Easy Digital Downloads-Plugin des sehr talentierten Pippin Williamson zu arbeiten, wollte ich etwas tiefer in WooCommerce einsteigen und Ihnen zeigen, wie Sie vorhandene Features nutzen können, um neue Funktionen zu erstellen. Und heute möchte ich Ihnen erklären, wie Sie einen Shortcode erstellen, der kürzlich angesehene Produkte anzeigt. Kürzlich angesehene Produkte sind eine unglaublich leistungsstarke Funktion, einfach weil es sich für mich um eine Art sehr einfache künstliche Intelligenz handelt. Dadurch können Benutzer in Sekundenschnelle problemlos zu Produkten zurückkehren, die sie bereits angesehen haben. Und die Tatsache, einen Shortcode zum Anzeigen kürzlich angesehener Produkte zu verwenden, ist großartig, da Sie ihn überall auf Ihrer Website platzieren können.
Wenn ich ein Tutorial auf WPexplorer erstelle, erkläre ich normalerweise Schritt für Schritt die Methode, aber da das heutige Tutorial etwas länger ist, erkläre ich lieber den gesamten Prozess und stelle Ihnen dann den vollständigen Code mit Kommentaren direkt im Code zur Verfügung.
Dies geschieht innerhalb eines Shortcodes
Also werden wir ein Plugin erstellen, das einen [woocommerce_recently_viewed_products per_page=“5″]-Shortcode registriert. Warum ein Plugin erstellen? Weil es der einfachste Weg ist, eine Funktion zu speichern, die Sie mit jedem Theme verwenden können. Wenn Sie sich entscheiden, einen Shortcode in einem Theme zu registrieren, ist der Shortcode nur verfügbar, wenn das Theme aktiviert ist. Mit einem Plugin ist die Funktion unabhängig vom verwendeten Theme weiterhin verfügbar. Eine weitere sehr wichtige Sache ist, dass Sie niemals WooCommerce-Dateien ändern sollten.
Magst du Kekse? Das tue ich wirklich!
Standardmäßig erstellt WooCommerce ein Cookie, das wichtige Daten darüber speichert, was ein Besucher im Shop tut und sieht. Und das ist genau die Art von Daten, die wir zum Erstellen unseres Plugins benötigen. Die wichtigsten Daten, die wir benötigen, werden in einem Cookie namens $_COOKIE[‘woocommerce_recently_viewed’] gespeichert. Grundsätzlich speichert dieses Cookie die ID der zuletzt angesehenen Produkte. Da WooCommerce diese IDs bereits speichert, besteht unsere Aufgabe schließlich darin, mithilfe des Abfrageattributs „post__in“ die richtige Abfrage zu erstellen und sicherzustellen, dass die Produkte, die wir anzeigen müssen, noch auf Lager sind. Dazu müssen wir die Methode $woocommerce->query->stock_status_meta_query() im Abfrageattribut „meta_query“ verwenden.
Der vollständige Code des Plugins
Da der Code ziemlich einfach ist, habe ich die Kommentare direkt in den Code eingefügt und keine Schritt-für-Schritt-Anleitung erstellt. Wenn jedoch etwas nicht klar ist, schreiben Sie bitte einen Kommentar und ich erkläre Ihnen die einzelnen Schritte gerne Teil des Codes!
<?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");
