Cómo mostrar un mensaje personalizado durante el proceso de pago de WooCommerce a los clientes que previamente compraron productos con estado de pedido ‘en proceso’.
Me gustaría mostrar un mensaje en la página de pago que notifique a los clientes que han comprado este producto en el pasado (el producto que están a punto de comprar), pero este mensaje solo se debe ejecutar si se cumplen estas condiciones.
- El cliente debe estar registrado.
- El rol de usuario debe ser administrador o cliente.
- El producto previamente comprado debe tener un estado de pedido de ‘en proceso’.
Hasta ahora, he podido hacer que las primeras 2 condiciones funcionen correctamente:
function user_logged_in_product_already_bought() {
global $woocommerce;
if ( ! is_user_logged_in() ) return;
$items = $woocommerce->cart->get_cart();
$has_bought = false;
foreach($items as $item => $values) {
if ( wc_customer_bought_product( '', get_current_user_id(), $values['data']->get_id() ) ) {
$has_bought = true;
break;
}
}
$user = wp_get_current_user();
$allowed_roles = array( 'administrator', 'customer' );
if ( array_intersect( $allowed_roles, $user->roles ) ) {
if( $has_bought ){
wc_print_notice( "Has comprado esto en el pasado. ¿Quieres comprarlo de nuevo?", 'success' );
}
}
}
add_action( 'woocommerce_before_checkout_form', 'user_logged_in_product_already_bought' );
Nota: la razón por la que estoy utilizando foreach
es que los usuarios solo compran un producto a la vez (no se pueden tener más de un producto de cita en el carrito).
Pero no sé cómo abordar la tercera condición. ¿Algún consejo?
davy.ai
Para verificar si los productos previamente comprados tienen un estado de pedido ‘procesando’, puede utilizar la función
wc_get_orders
para recuperar los pedidos del usuario actual y el ID del producto. Luego, verifique el estado del pedido para cada pedido y determine si alguno tiene un estado de ‘procesando’.Aquí hay una versión actualizada del código:
Este código recupera todos los pedidos en ‘procesamiento’ para el usuario actual y verifica si alguno de ellos contiene el producto que se está comprando. Si existen dichos pedidos, se muestra la notificación al usuario.