IN WooCommerce, I would like to perform an action if at least one product from a list is bought and if the current order status for that product is completed.
For instance I can only verify if the product is bought:
global $woocommerce;
$user_id = get_current_user_id();
$current_user= wp_get_current_user();
$product_list = array('11', '12', '13', '14', '15','16');
$text= false;
foreach ($product_list as $value):
if (wc_customer_bought_product( $customer_email, $user_id, $value) ) {
$text = true;
}
endforeach;
Try the following that will be triggered each time an order gets "completed" status, checking if the current order has specific products from your defined Ids, allowing you to perform an action:
add_action('woocommerce_order_status_completed', 'action_on_order_status_completed', 10, 2 );
function action_on_order_status_completed( $order_id, $order ){
// Here below define your product id(s)
$products_ids = array('11', '12', '13', '14', '15','16');
$found = false; // Initializing
// Loop through order items
foreach ( $order->get_items() as $item ) {
if ( array_intersect([$item->get_product_id(), $item->get_variation_id()], $products_ids) ) {
$found = true;
break; // Stop the loop
}
}
if ( $found ) {
// HERE do your action
}
}
Code goes in functions.php file of your active child theme (or active theme). Tested and work.
Related: How to get WooCommerce order details