Este snippet crea una nueva pestaña en Mi Cuenta (junto con un nuevo endpoint), y muestra los productos comprados en pedidos anteriores. Tras añadirlo, guarda tus enlaces permantentes para activar el endpoint.
/* Mostrar productos ya comprados por el usuario */
// primero hay que añadir un nuevo enlace a los de la página de mi cuenta
add_filter('woocommerce_account_menu_items', 'ayudawp_enlace_productos_comprados', 40);
function ayudawp_enlace_productos_comprados($menu_links) {
// usamos array_slice() para que el enlace sea el tercero
return array_slice($menu_links, 0, 2, true) +
array('purchased-products' => 'Productos comprados') +
array_slice($menu_links, 2, NULL, true);
}
// registramos la regla de rewrite . OJO, tras agregar el codigo recuerda guardar los ajustes de enlaces permanentes o no funciona el codigo
add_action('init', 'ayudawp_variable_productos_comprados');
function ayudawp_variable_productos_comprados() {
add_rewrite_endpoint('purchased-products', EP_PAGES);
}
// llenamos la nueva pagina con el contenido
add_action('woocommerce_account_purchased-products_endpoint', 'ayudawp_mostrar_productos_comprados');
function ayudawp_mostrar_productos_comprados() {
global $wpdb;
// esta query SQL permite mostrar todos los productos comprados por el usuario actual
// en este ejemplo ordenamos los productos por fecha pero puedes ordenarlos como quieras
$purchased_products_ids = $wpdb - > get_col(
$wpdb - > prepare(
"
SELECT itemmeta.meta_value FROM " . $wpdb->prefix . "
woocommerce_order_itemmeta itemmeta INNER JOIN " . $wpdb->prefix . "
woocommerce_order_items items ON itemmeta.order_item_id = items.order_item_id INNER JOIN $wpdb - > posts orders ON orders.ID = items.order_id INNER JOIN $wpdb - > postmeta ordermeta ON orders.ID = ordermeta.post_id WHERE itemmeta.meta_key = '_product_id'
AND ordermeta.meta_key = '_customer_user'
AND ordermeta.meta_value = % s ORDER BY orders.post_date DESC ",
get_current_user_id()
)
);
// si algun pedido tiene el mismo producto evitamos que se muestren repetidos
$purchased_products_ids = array_unique($purchased_products_ids);
// si el cliente ha comprado algo
if (!empty($purchased_products_ids)) {
// hacemos la WP_Query
$purchased_products = new WP_Query(array(
'post_type' => 'product',
'post_status' => 'publish',
'post__in' => $purchased_products_ids,
'orderby' => 'post__in',
'posts_per_page' => -1,
));
woocommerce_product_loop_start();
while ($purchased_products - > have_posts()): $purchased_products - > the_post();
wc_get_template_part('content', 'product');
endwhile;
woocommerce_product_loop_end();
woocommerce_reset_loop();
wp_reset_postdata();
} else {
echo 'Todavía no has comprado nada.';
}
}
Herramientas
- WooCommerce
El plugin para crear tiendas online por excelencia. Tanto de productos físicos como digitales. Es la base para prácticamente cualquier proyecto web que acepte pagos online.