Programación

Obtener la fecha de compra de un producto en WooCommerce un usuario

Hace poco me he encontrado con un proyecto donde he necesitado obtener la primera fecha de compra de un producto por parte de usuario. En este caso la idea era poder hacer una restricción de contenido, pero este mismo dato, puede serviros para labores marketing (ofrece cupones en base a la antigüedad de la compra de un producto por un cliente), para temas estadísticos o para añadir datos a un panel de cliente, por ejemplo.

La idea es tener una función que reciba dos parámetros el ID de producto y el ID de usuario y te devuelva la última fecha de compra (que si hay dos o más compras por parte de un usuario, que nos devuelva la más reciente).

function fecha_compra_producto( $product_id, $user_id = 0 ){
        $user_id = ( empty( $user_id ) ) ? get_current_user_id() : $user_id;

        $orders = wc_get_orders( array(
            'posts_per_page' => -1,
            'customer_id' => $user_id,
            'orderby' => 'date',
            'order' => 'DESC',
            'status' => array( 'wc-completed' ),
        ) );

        foreach( $orders as $order_id ) {
           $order = wc_get_order( $order_id );
           $items = $order->get_items();

            foreach( $items as $order_item ){
                if( $product_id == $order_item->get_product_id() ) 
                    return $order->order_date;
            }
        }

        return false;
    }

Comentemos un poco el código:

  • Si os fijáis el id de usuario es opcional, por eso se puede rellenar o no, si no se rellena se obtiene el id de usuario actual en la primera línea con get_current_user_id() y un operador ternario
  • Luego obtenemos un listado de pedidos, enviando los siguientes parámetros:
    • que nos dé TODOS los pedidos sin límite que cumplan las condiciones, por eso lo de posts_per_page igual a -1
    • que sean del usuario definido por el user_id
    • que estén completados
    • y que los ordenes de fecha de forma descendentes
  • Iteramos por los pedidos uno a uno, creando un objeto de cada pedido
  • Obtenemos los ítems del pedido, el listado de productos
  • Y comprobamos si el producto es el que hemos comprado, si lo es, devuelve la fecha
  • Si no encontramos el producto en todos los pedidos, devolvemos un false
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Francisco Javier Carazo Gil

Entradas recientes

RedSys para Contact Form 7 ahora muestra el justificante y el motivo del rechazo en la página de gracias

Ya está disponible la versión 2.2 de Contact Form 7 – Integración con RedSys, y…

hace % días

¿Qué aporta la integración de Bizum y métodos similares en el proceso de pago?

El comercio electrónico español, que se encuentra en pleno crecimiento y transformación, vive actualmente un…

hace % días

Pagos recurrentes en Contact Form 7: suscripciones con RedSys, paso a paso

Hasta ahora, la integración de Contact Form 7 con RedSys solo sabía cobrar pagos únicos:…

hace % días

Cuotas personalizadas con RedSys

El pago fraccionado de RedSys para WooCommerce lleva un tiempo permitiendo dividir el precio de…

hace % días

Contact Form 7 – Integración con RedSys ya habla catalán, gallego y euskera

Ya está disponible la versión 1.24 de Contact Form 7 - Integración con RedSys, y…

hace % días

Calendario de pagos a medida en WooCommerce Subscriptions: cobra en las fechas que tú decidas

Hasta ahora, cobrar una suscripción en WooCommerce significaba aceptar una regla muy simple: eliges un…

hace % días