Se abre en una pestaña nueva

Estás viendo

Cómo mostrar los productos comprados por el cliente en la página de su cuenta

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.