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