Следующая функция использует очень легкий SQL-запрос, который возвращает идентификатор последнего заказа из определенного идентификатора продукта для данного клиента:
function get_last_order_id_from_product( $product_id, $user_id = 0 ) {
global $wpdb;
$customer_id = $user_id == 0 ? get_current_user_id() : $user_id;
return $wpdb->get_var( "
SELECT p.ID FROM {$wpdb->prefix}posts AS p
INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user'
AND pm.meta_value = $customer_id
AND woim.meta_key IN ( '_product_id', '_variation_id' )
AND woim.meta_value = $product_id
ORDER BY p.ID DESC LIMIT 1
" );
}
Код добавляется в файл function.php вашей активной дочерней темы(или активная тема).Протестировано и работает.
Если клиент еще не приобрел продукт, функция вернет false
.
Примеры использования:
Здесь ниже вы установите Идентификатор продукта 37
и, опционально, идентификатор пользователя 153
(если выне используйте код для внешнего интерфейса, где функция может получить идентификатор текущего пользователя) * /
$order_id = get_last_order_id_from_product( 37, 153 );
или для текущего пользователя:
$order_id = get_last_order_id_from_product( 37 );