Как получить данные пользователей из базы данных WordPress WooCommerce для отображения

Вопрос или проблема

Я новичок в создании веб-сайтов, но я уже разобрался с чем-то. Любая помощь, чтобы продвинуться вперед, будет очень ценна!

У меня есть сайт на 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.

Шаги для извлечения пользовательских данных:

  1. Получение информации о текущем пользователе:
    Необходимо убедиться, что пользователь вошел в систему и получить его ID.

  2. Извлечение заказов пользователя:
    Используйте SQL-запросы для получения всех заказов, принадлежащих текущему пользователю.

  3. Извлечение данных о заказах:
    После получения заказов, можно использовать 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 'Пожалуйста, войдите в свою учетную запись для просмотра информации о заказах.';
}
?>

Объяснение кода

  1. Проверка пользователя: Сначала скрипт проверяет, вошел ли пользователь. Если да, то получаем его ID.

  2. Получение заказов: Запрос к wp_posts дает все заказы пользователя (post_type = 'shop_order').

  3. Извлечение дате и данных о продуктах: Для каждого заказа извлекаем метаданные, включая дату заказа и названия купленных продуктов. Мы также подсчитываем количество купленных услуг.

  4. Отображение в таблице: В конце собираем все данные в HTML-таблицу для презентации на странице профиля пользователя.

Заключение

Таким образом, вы можете эффективно извлекать и отображать пользовательскую информацию о заказах из базы данных WooCommerce. Убедитесь, что у вас есть все необходимые права на доступ к данным и что вы обрабатываете пользовательскую информацию в соответствии с правилами и законами о защите данных.

Оцените материал
Добавить комментарий

Капча загружается...