Как отображать записи форм на вашем сайте из WPForms

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

Я работаю над созданием пользовательского портала с использованием последней версии WPForms. Моя цель – отобразить определенные данные из записей WPForms, такие как номер счета, метод депозита, сумма и дата депозита, в виде таблицы.

Вот пример таблицы базы данных (wp_wpforms_entry_fields), с которой я работаю:

Пример Таблицы Базы Данных

Я извлекаю данные с помощью следующего PHP-кода:

function wpc_elementor_shortcode_deposit($atts){
    $user_id = get_current_user_id();
    global $wpdb;

    $getentry_id = $wpdb->get_results("SELECT entry_id FROM wp_wpforms_entries WHERE user_id = $user_id AND form_ID = 16758");

    echo '<table style="font-family:cairo">';
    foreach ($getentry_id as $item) {
        foreach ($item as $key => $value) {
            $eID = $value; // ID записи пользователя

            $post_id = $wpdb->get_results("SELECT value, date FROM wp_wpforms_entry_fields WHERE entry_id = $eID AND (field_id = 7 OR field_id = 13) AND form_ID = 16758");
            
            foreach ($post_id as $item) {
                foreach ($item as $key => $value) {
                    echo $value . '<br>';
                }
            }
        }
    }
    echo '</table>';
}

Проблема в том, что дата, которая отображается, дублируется, и я не могу понять почему. Вот что я сейчас получаю:

Дублированные Данные

Но то, что мне нужно, это такой чистый вывод:

Желаемый Вывод

Я пытался решить это в течение нескольких дней безуспешно.

Что я пробовал:

  1. Отладка запросов, чтобы убедиться, что я выбираю правильные поля.
  2. Экспериментирование с фильтрацией дубликатов программным путем.

Проблема:

Результаты ДАТЫ кажутся дублированными в моей таблице, и я подозреваю, что это связано с тем, как я запрашиваю или перебираю данные.

Как я могу изменить свой код или запросы, чтобы правильно извлекать данные без дубликатов?

Обновление:

Благодаря @bosco, я нашел WPforms API здесь и именно то, что мне нужно в этом коротком коде: [wpforms_entries_table id="211" fields="0,2" user="current"]
Но теперь у меня есть 2 проблемы:

1-я: Результаты данных отображаются горизонтально вот так:
введите описание изображения здесь

Где 1 – одна запись, а 2 – другая, и так далее.
Что мне делать, если записей так много?

Также нет значения даты для ДАТЫ записей записи

Ответ или решение

Как отобразить записи форм на своем сайте с помощью WPForms

Разработка пользовательского портала с использованием последней версии WPForms предоставляет множество возможностей для управления и отображения данных. В данном руководстве мы обсудим, как правильно извлекать и отображать данные записей формы, такие как номер счета, метод пополнения, сумма и дата пополнения, в табличном формате.

Проблема с дублирующимися данными

Ваша текущая реализация использует PHP-код для извлечения данных, однако вы сталкиваетесь с проблемой дублирования даты. Это может быть связано с тем, как вы выполняете запросы и осуществляете итерации по данным.

Исправление кода

  1. Оптимизация запроса: Вам нужно убедиться, что запросы к базе данных выполняются корректно, так чтобы они не возвращали дублирующиеся записи. Мы можем оптимизировать ваши запросы следующим образом:
function wpc_elementor_shortcode_deposit($atts) {
    $user_id = get_current_user_id();
    global $wpdb;

    // Извлечение всех записей для данного пользователя и формы
    $entries = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT e.entry_id, ef.field_id, ef.value 
            FROM wp_wpforms_entries AS e
            JOIN wp_wpforms_entry_fields AS ef 
            ON e.entry_id = ef.entry_id 
            WHERE e.user_id = %d AND e.form_id = %d AND ef.field_id IN (7, 13)",
            $user_id,
            16758
        )
    );

    $data = [];
    foreach ($entries as $entry) {
        if (!isset($data[$entry->entry_id])) {
            $data[$entry->entry_id] = [
                'account_number' => null,
                'deposit_method' => null,
                'amount' => null,
                'date' => null,
            ];
        }
        if ($entry->field_id == 7) {
            $data[$entry->entry_id]['account_number'] = $entry->value;
        } elseif ($entry->field_id == 13) {
            $data[$entry->entry_id]['date'] = $entry->value; // Замените на нужное поле
        }
    }

    // Обработка и вывод данных
    echo '<table style="font-family:cairo">';
    echo '<tr><th>Account Number</th><th>Deposit Method</th><th>Amount</th><th>Date of Deposit</th></tr>';
    foreach ($data as $entry) {
        echo '<tr>';
        echo '<td>' . esc_html($entry['account_number']) . '</td>';
        echo '<td>' . esc_html($entry['deposit_method']) . '</td>'; // Поле для метода пополнения
        echo '<td>' . esc_html($entry['amount']) . '</td>'; // Поле для суммы
        echo '<td>' . esc_html($entry['date']) . '</td>';
        echo '</tr>';
    }
    echo '</table>';
}

Использование встроенного API WPForms

Согласно вашим обновлениям, вы нашли, что WPForms предоставляет API для отображения записей. Вы можете использовать шорткод [wpforms_entries_table id="211" fields="0,2" user="current"] для отображения записей напрямую.

Однако, как вы отметили, результаты отображаются горизонтально, что может быть затруднительно для восприятия, особенно при большом количестве записей. В этом случае рекомендуется настроить таблицу так, чтобы каждая запись отображалась в отдельной строке.

Пример шорткода:

Для этого вы можете изменить настройки шорткода, если это возможно, чтобы он мог отображать записи в виде таблицы. Если шорткод не поддерживает такую функциональность, вам нужно будет написать свою собственную реализацию, как показано выше.

Итог

Вышеописанные шаги помогут вам корректно извлекать и отображать записи из WPForms без дублирования данных, а также создать более удобный интерфейс для ваших пользователей. Не забывайте тестировать каждое изменение кода на локальной среде, прежде чем переносить на рабочий сайт. С правильным подходом вы сможете создать эффективный и функциональный портал для клиентов.

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

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