Hace unos días, el equipo de WooThemes Anunciado versión 2 del muy popular complemento WooCommerce que permite que cada WordPress Web para vender cualquier tipo de producto de forma muy sencilla. Incluso si estoy más acostumbrado a trabajar con el increíble plugin Easy Digital Downloads, por los muy talentosos Pippin Williamson, Quería profundizar un poco más en WooCommerce y mostrarte cómo puedes usar las funciones existentes para crear nuevas funciones. Y hoy me gustaría explicarte cómo crear un código corto que muestre los productos vistos recientemente. Los productos vistos recientemente son una característica increíblemente poderosa simplemente porque, para mí, es una especie de inteligencia artificial muy básica. Permite a los usuarios volver fácilmente a los productos que ya vieron en cuestión de segundos. Y el hecho de usar un código corto para mostrar los productos vistos recientemente es genial porque puede colocarlo en cualquier lugar de su sitio web.
Normalmente, cuando creo un tutorial en WPexplorer explico paso a paso el método, pero como el tutorial de hoy es un poco más largo, prefiero explicar todo el proceso y luego proporcionarle el código completo con comentarios directamente en el código.
Haciéndolo dentro de un shortcode
Entonces, vamos a crear un complemento que registrará un [woocommerce_recently_viewed_products per_page=”5″] Código corto. ¿Por qué crear un complemento? Porque es la forma más sencilla de almacenar una función que puede utilizar con cualquier tema. Si decide registrar un código corto en un tema, el código corto estará disponible solo si el tema está activado. Con un complemento, no importa el tema que esté utilizando, la función seguirá estando disponible. Otra cosa muy importante es que nunca debe modificar los archivos de WooCommerce.
¿Te gustan las galletas? ¡Realmente lo hago!
De forma predeterminada, WooCommerce crea una cookie que almacena datos importantes sobre lo que hace y ve un visitante en la tienda. Y ese es exactamente el tipo de datos que necesitamos para crear nuestro complemento. Los datos más importantes que necesitamos se almacenan en cookies llamadas $ _GALLETA[‘woocommerce_recently_viewed’]. Básicamente, esta cookie almacena el ID de los últimos productos vistos. Como WooCommerce ya está guardando estos ID, nuestro trabajo es finalmente crear la buena consulta usando el «publicar”Atributo de consulta y para asegurarnos de que los productos que necesitamos mostrar todavía están en stock. Para hacerlo, necesitamos usar el $ woocommerce-> consulta-> stock_status_meta_query () método en el «meta_consulta”Atributo de consulta.
El código completo del complemento
Como el código es bastante simple, agregué los comentarios directamente en el código y no hice un tutorial paso a paso, pero si algo no está claro, escriba un comentario y estaré más que feliz de explicarles cada uno. parte del código!
<?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");