Con la siguiente función en php, sabremos si un usuario ha comprado un producto en la tienda online montada sobre WordPress + WooCommerce.
Para ello vamos a recibir dos parámetros, el identificador del usuario y el identificador del producto a evaluar si lo ha comprado y recibiremos un resultado true
o false
, en función de si ha comprado o no el producto respectivamente.
El snippet obtendrá inicialmente todos los pedidos que el usuario tiene en el estado procesando o finalizado (productos ya abonados) y posteriormente, recirrerá uno a uno, los productos incluidos en esos pedidos.
Veamos el código a continuación:
function GetProductoComprado($idproducto, $idusuario)
{
$comprado = false;
// Aquí asignamos los productos a evaluar en el array
$prod_arr = array( $idproducto );
// Obtenemos todos los pedidos del cliente que están en wc-processing o wc-completed
$customer_orders = get_posts( array(
‘numberposts’ => -1,
‘meta_key’ => ‘_customer_user’,
‘meta_value’ => $idusuario,
‘post_type’ => ‘shop_order’, // WC orders post type
‘post_status’ => array( ‘wc-processing’, ‘wc-completed’ )
) );
foreach ( $customer_orders as $customer_order ) {
// Para mantener la compatibilidad con WooCommerce 3+
$order_id = method_exists( $order, ‘get_id’ ) ? $order->get_id() : $order->id;
$order = wc_get_order( $customer_order );
// Buscamos en cada producto comprado por el cliente en el pedido
foreach ($order->get_items() as $item) {
// WC 3+ compatibility
if ( version_compare( WC_VERSION, ‘3.0’, ‘<' ) )
$product_id = $item[‘product_id’];
else
$product_id = $item->get_product_id();
// Si el producto ha sido comprado, estará en el array
if ( in_array( $product_id, $prod_arr ) )
$comprado = true;
}
}
// devolvemos «true» si alguno de los productos especificados ha sido comprado
return $comprado;
}
En los contenidos relacionados os dejo un enlace a mi plugin para crear snippets favoritos, para no tener que editar el fichero functions.php
del tema.