WooCommerce фактически сохраняет IP-адреса клиентов в метаданных заказа по умолчанию.Вы можете использовать метод get_customer_ip_address()
на WC_Order
для доступа к этим метаданным.Аналогично, WooCommerce включает WC_Geolocation::get_ip_address()
для получения IP-адреса подключенного в данный момент клиента.
Соединяя их вместе, вы можете использовать ловушку woocommerce_checkout_process
, чтобы выдать ошибку, если пользователь с тем же IP-адресом пытается сделать тоже самоемного покупок за данный период времени.
Здесь я использую wc_get_orders()
, чтобы кратко запросить все заказы с соответствующим IP за последние 24 часа, и отменить транзакцию, если естьболее 30 результатов.
function my_ip_checker() {
$last_24_hours_from_ip_results = wc_get_orders(array(
'date_created' => '>=' . (time() - 86400), // time in seconds
'customer_ip_address' => WC_Geolocation::get_ip_address(),
'paginate' => true // adds a total field to the results
));
if($last_24_hours_from_ip_results->total > 30) {
wc_add_notice('Too many orders in the last 24 hours. Please return later.', 'error');
}
}
add_action('woocommerce_checkout_process', 'my_ip_checker', 10, 0);
Обратите внимание, что вызов wc_add_notice()
с типом 'error'
остановит выполнение транзакции.