Вопрос или проблема
Я новичок в создании веб-сайтов, но я уже разобрался с чем-то. Любая помощь, чтобы продвинуться вперед, будет очень ценна!
У меня есть сайт на WP с WhoCommerce. Я смог получить рабочую функциональность входа, но теперь я хотел бы отображать пользовательскую информацию на странице профиля пользователя.
Я хотел бы получить следующую пользовательскую информацию для отображения:
Дата покупки – купленная услуга – сколько купленных услуг
Я пробовал что-то вроде:
<?php
global $wpdb;
if ( is_user_logged_in() ) {
global $current_user;
get_currentuserinfo();
echo $current_user->display_name . ' Привет: ';}
$currentUser = get_current_user_id();
$customers = $wpdb->get_results("SELECT * FROM wp_wc_order_product_lookup . currentUser”);
?>
<table class="table table-hover">
<?php foreach($customers as $customer){ ?>
<tr>
<td><center><?php echo $customer->date_created; ?></center></td>
//и так далее.
</tr>
<?php } ?>
Как мне изменить свой код, чтобы отобразить эту пользовательскую информацию?
WooCommerce использует пользовательский тип публикации “shop_order” для хранения заказов. Это значит, что заказы будут храниться в таблице базы данных wp_posts с установленным значением столбца post_type на shop_order.
SELECT ID, post_author, post_date, post_status, post_type FROM wp_posts
WHERE post_type="shop_order"
WooCommerce хранит большую часть данных, связанных с заказами, как метаданные постов.
Как только у вас есть ID заказа, вы можете найти данные клиента, выполнив поиск по таблице wp_postmeta по ID заказа.
SELECT * FROM wp_postmeta WHERE post_id = $currentUser
Дополнительная информация https://usersinsights.com/woocommerce-customer-database/
Ответ или решение
Чтобы извлечь пользовательские данные из базы данных WordPress с установленным плагином WooCommerce и отобразить их на странице профиля пользователя, необходимо учитывать несколько аспектов, связанных с архитектурой базы данных WooCommerce и правильным написанием SQL-запросов.
Структура базы данных WooCommerce
WooCommerce использует wp_posts
для хранения заказов в виде записей с типом shop_order
. Все метаданные заказов хранятся в таблице wp_postmeta
, где каждая запись содержит информацию о каждом заказе, привязанном к ID заказа в wp_posts
.
Шаги для извлечения пользовательских данных:
-
Получение информации о текущем пользователе:
Необходимо убедиться, что пользователь вошел в систему и получить его ID. -
Извлечение заказов пользователя:
Используйте SQL-запросы для получения всех заказов, принадлежащих текущему пользователю. -
Извлечение данных о заказах:
После получения заказов, можно использоватьwp_postmeta
, чтобы извлечь необходимые данные о каждом заказе.
Пример кода
Вот как можно модифицировать ваш код для извлечения и отображения информации о заказах:
<?php
// Подключение глобальной переменной WordPress для работы с базой данных
global $wpdb;
// Проверка, вошел ли пользователь в систему
if ( is_user_logged_in() ) {
global $current_user;
wp_get_current_user();
// Получение ID текущего пользователя
$currentUser = get_current_user_id();
// Запрос для получения заказов текущего пользователя
$orders = $wpdb->get_results(
$wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'shop_order' AND post_author = %d",
$currentUser
)
);
echo '<table class="table table-hover">';
echo '<tr><th>Дата покупки</th><th>Купленная услуга</th><th>Количество купленных услуг</th></tr>';
// Перебор заказов пользователя
foreach($orders as $order) {
$order_id = $order->ID;
// Получение даты создания заказа
$order_date = get_the_date('Y-m-d H:i:s', $order_id);
// Запрос для получения метаданных заказа
$meta_data = $wpdb->get_results(
$wpdb->prepare(
"SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d",
$order_id
)
);
$product_names = [];
$total_quantity = 0;
// Извлечение информации о купленных продуктах
foreach ($meta_data as $meta) {
if ($meta->meta_key === '_line_total') {
// Логика для идентификации услуг и их количеств
$total_quantity++;
}
if ($meta->meta_key === '_product_id') {
$product_names[] = get_the_title($meta->meta_value); // Получение названия продукта по ID
}
}
echo '<tr>';
echo '<td><center>' . esc_html($order_date) . '</center></td>';
echo '<td><center>' . implode(', ', $product_names) . '</center></td>';
echo '<td><center>' . esc_html($total_quantity) . '</center></td>';
echo '</tr>';
}
echo '</table>';
} else {
echo 'Пожалуйста, войдите в свою учетную запись для просмотра информации о заказах.';
}
?>
Объяснение кода
-
Проверка пользователя: Сначала скрипт проверяет, вошел ли пользователь. Если да, то получаем его ID.
-
Получение заказов: Запрос к
wp_posts
дает все заказы пользователя (post_type = 'shop_order'
). -
Извлечение дате и данных о продуктах: Для каждого заказа извлекаем метаданные, включая дату заказа и названия купленных продуктов. Мы также подсчитываем количество купленных услуг.
-
Отображение в таблице: В конце собираем все данные в HTML-таблицу для презентации на странице профиля пользователя.
Заключение
Таким образом, вы можете эффективно извлекать и отображать пользовательскую информацию о заказах из базы данных WooCommerce. Убедитесь, что у вас есть все необходимые права на доступ к данным и что вы обрабатываете пользовательскую информацию в соответствии с правилами и законами о защите данных.