Ограничение заказов woocommerce по IP - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно запретить продажу более 30 товаров в день по IP-адресу в woocommerce.В основном это защита от ботов.Я думаю, что логика должна выглядеть примерно так:

  • получить IP-адрес покупателя на покупку и сохранить его в заказе мета
  • , чтобы проверить, есть ли другие покупки с этого IP напоследние 24 часа
  • если больше 30 - отобразить ошибку до оплаты и попросить вернуться позже

* регистрация пользователя отключена

Так что я не уверен, гденачать и как следовать правилам хуков woocommerce.

Любые примеры кода будут высоко оценены

1 Ответ

0 голосов
/ 19 декабря 2018

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' остановит выполнение транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...