Bloquear compras o establecer un mínimo de compra es algo habitual en algunas tiendas online. De todas las variantes que hay, vamos a bloquear la compra de un producto a los clientes que ya lo hayan adquirido.
Es decir, si un cliente ha comprado ya el producto X y no queremos que lo vuelva a adquirir, lo podemos bloquear con lo que os voy a explicar en este tutorial.
Lo primero que tenemos que hacer es que los usuarios para comprar tengan que registrarse sí o sí, porque si no no podremos saber quién a comprado y quién no. Para esto nos vamos a WooCommerce > Ajustes > Cuentas y privacidad y en la sección Pago como invitado desmarcamos las dos opciones( Permite a los clientes hacer pedidos sin tener una cuenta).
Con esto, hemos conseguido que cada compra que se realice en la web vaya asociada a un usuario. Ahora ya podemos añadir un código para bloquear la compra repetida de un producto en nuestra tienda online con WooCommerce.
Añadimos este código en el functions.php de nuestro Child Theme o bien en nuestro plugin de funcionalidades como explico aquí. Este código es si quieres limitarlo a un o algunos productos en concreto:
add_filter( 'woocommerce_variation_is_purchasable', 'solo_comprar_un_producto', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'solo_comprar_un_producto', 10, 2 );
function solo_comprar_un_producto( $purchasable, $product ) {
// Aqui se establecen los ID de los productos en la matriz que se pueden comprar sólo una vez, si es mas de uno separa con comas
$targeted_products = array(**PON AQUI EL ID ENTRE LOS PARENTESIS, QUITA LAS ESTRELLAS**);
// SOlo para usuarios registrados y no para productos variables
if( ! is_user_logged_in() || $product->is_type('variable') )
return $purchasable;
$user = wp_get_current_user();
if ( in_array( $product->get_id(), $targeted_products ) &&
wc_customer_bought_product( $user->user_email, $user->ID, $product->get_id() ) ) {
$purchasable = false;
}
return $purchasable;
}
Con esto no saldrá el botón de añadir al carrito y no podrá comprarlo:

Luego podríamos bloquear cualquier compra repetida de productos, independientemente del producto que sea. Sería un ajuste para toda la tienda:
function dl_desactivar_compra_repetida_global( $purchasable, $product ) {
if ( $product->is_type( 'variable' ) ) {
return $purchasable;
}
$product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
$purchasable = false;
}
if ( $purchasable && $product->is_type( 'variation' ) ) {
$purchasable = $product->parent->is_purchasable();
}
return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'dl_desactivar_compra_repetida_global', 10, 2 );
Espero que os haya servido este tutorial. Recordad que si queréis tener este tipo de cambios y actualizaciones seguras en la web, podéis revisar mi servicio de mantenimiento WooCommerce.
Deja una respuesta