Я сейчас пишу скрипт по переносу пользователей с одного сайта на другой. Нужны пользователи, которые сделали хотя бы один заказ через интернет-магазин на WooCommerce.
Все пользователи по умолчанию хранятся в таблице wp-users. Но когда на сайте включена регистрация, то очень велик шанс, что зарегистрировано очень много ботов и прочих непонятных личностей. Для примера в текущем проекте на сайте-доноре 34 096 пользователей.
В таблице wp_usermeta можно найти все ключевые признаки активности пользователя интернет-магазина. WooCommerce сохраняет мета-ключи:
_order_count— количество заказов_money_spent— сумма покупок_last_order— ID последнего заказаpaying_customer— флаг: 1, если есть хотя бы один заказ не в статусе «Отменён«
Вот готовый SQL-запрос, который вернёт всех пользователей, у которых paying_customer = 1:
SELECT wp_users.*
FROM wp_users
JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_usermeta.meta_key = 'paying_customer' AND wp_usermeta.meta_value = '1';Мы получим список всех пользователей, которые сделали хотя бы один заказ не в статусе «Отменён«. В моем случае — это 2528.
Вот альтернатива: по _order_count > 0
SELECT wp_users.*
FROM wp_users
JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_usermeta.meta_key = '_order_count' AND CAST(wp_usermeta.meta_value AS UNSIGNED) > 0;Тут мы получаем всех пользователей, у которых есть хотя бы один заказ в любом статусе. В моем случае — это 2 973 пользователя. И я для себя выбрал этот вариант.
Ну и SQL-запрос для wp_usermeta
SELECT wp_usermeta.*
FROM wp_usermeta
JOIN wp_usermeta AS wp_usermeta_order_count
ON wp_usermeta.user_id = wp_usermeta_order_count.user_id
AND wp_usermeta_order_count.meta_key = '_order_count'
WHERE CAST(wp_usermeta_order_count.meta_value AS UNSIGNED) > 0;Итого от 34 096 пользователей у нас осталось 2 528 пользователя (примерно 9%), с данными которых я буду работать.
