Вопрос или проблема
Я работаю над созданием пользовательского портала с использованием последней версии 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>';
}
Проблема в том, что дата, которая отображается, дублируется, и я не могу понять почему. Вот что я сейчас получаю:
Но то, что мне нужно, это такой чистый вывод:
Я пытался решить это в течение нескольких дней безуспешно.
Что я пробовал:
- Отладка запросов, чтобы убедиться, что я выбираю правильные поля.
- Экспериментирование с фильтрацией дубликатов программным путем.
Проблема:
Результаты ДАТЫ кажутся дублированными в моей таблице, и я подозреваю, что это связано с тем, как я запрашиваю или перебираю данные.
Как я могу изменить свой код или запросы, чтобы правильно извлекать данные без дубликатов?
Обновление:
Благодаря @bosco, я нашел WPforms API здесь и именно то, что мне нужно в этом коротком коде: [wpforms_entries_table id="211" fields="0,2" user="current"]
Но теперь у меня есть 2 проблемы:
1-я: Результаты данных отображаются горизонтально вот так:
Где 1 – одна запись, а 2 – другая, и так далее.
Что мне делать, если записей так много?
Также нет значения даты для ДАТЫ записей записи
Ответ или решение
Как отобразить записи форм на своем сайте с помощью WPForms
Разработка пользовательского портала с использованием последней версии WPForms предоставляет множество возможностей для управления и отображения данных. В данном руководстве мы обсудим, как правильно извлекать и отображать данные записей формы, такие как номер счета, метод пополнения, сумма и дата пополнения, в табличном формате.
Проблема с дублирующимися данными
Ваша текущая реализация использует PHP-код для извлечения данных, однако вы сталкиваетесь с проблемой дублирования даты. Это может быть связано с тем, как вы выполняете запросы и осуществляете итерации по данным.
Исправление кода
- Оптимизация запроса: Вам нужно убедиться, что запросы к базе данных выполняются корректно, так чтобы они не возвращали дублирующиеся записи. Мы можем оптимизировать ваши запросы следующим образом:
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 без дублирования данных, а также создать более удобный интерфейс для ваших пользователей. Не забывайте тестировать каждое изменение кода на локальной среде, прежде чем переносить на рабочий сайт. С правильным подходом вы сможете создать эффективный и функциональный портал для клиентов.