Выгрузка всех данных о пользователях и заказах
Нужно сделать выгрузку всех данных всех пользователей в woocommerce, т.е. собрать в массив и потом уже использовать данный массив к примеру для создания csv.
А именно нужны такие поля:
user_id, first_name, last_name, email, phone, order_ids, total, discount, product_ids
order_ids - order_id всех заказов у текущего пользователя, нужно перечислить через запятую,
total - общая сумма, которую пользователь заплатил за товары,
discount - общая сумма скидок, к примеру по купонам,
product_ids - product_id всех товаров, которые пользователь купил, через запятую
т.е. в каждом ряду должна быть информация по отдельному пользователю.
Интересует такой вопрос:
подходит ли данный код для этой задачи?
$order_statuses = array('wc-completed');
$users = array();
$all_users = get_users();
foreach($all_users as $user){
$_user = array();
$order_ids = array();
$total = array();
$discount = array();
$customer_orders = wc_get_orders( array(
'meta_key' => '_customer_user',
'meta_value' => $user->ID,
'post_status' => $order_statuses,
'numberposts' => -1,
) );
foreach($customer_orders as $order){
$order_ids[] = $order->get_id();
$total[] = $order->get_total();
}
$_user['email'] = $user->user_emal;
...
$users[] = $_user;
}
получается для каждого отдельного пользователя вызывается отдельный цикл по заказам, ведь пользователей может быть тысячи.
Есть ли вариант чтобы как-то оптимизировать данную задачу?
Может быть с помощью wpdb и sql-запросов.
И пользователи могут не иметь заказов, к примеру подписчики.
P.S.
таблицы, отвечающие за пользователей:
users: user_id,user_email,user_pass,user_login
usermeta: в этой таблице дополнительные поля пользователей(не обязательна)
таблицы, связанные с заказоми:
posts: ID,post_title,post_status
postmeta: дополнительные поля заказов (второстепенная таблица с дополнительными. данными)
woocommerce_order_items: тут номер заказа и ссылка на таблицу с купленными товарами
woocommerce_order_itemmeta: тут список купленных товаров, данные товары привязаны к таблице woocommerce_order_items