Пользовательская форма для сохранения данных в базе данных
Я никогда раньше не использовал WordPress, но имею большой опыт программирования. Мой вопрос в том, как создать пользовательские формы в WordPress?
Мне нужно создать форму, где пользователь заполняет несколько полей ввода, и при отправке данные должны сохраняться в базе данных. Мне не нужны никакие уведомления о сохранении.
Также мне нужно иметь возможность запрашивать эти данные и выводить их в HTML-таблице.
Спасибо

Я сам нашел решение проблемы. Посмотрите код ниже - он должен сработать.
Поместите этот код в ваш новый пользовательский шаблон.
<?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_achord;
$data = array(
'name' => $_POST['yourname'],
'chord' => $_POST['chord']
);
$format = array(
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'данные сохранены' ;
}
} else {
?>
<form method="post">
<input type="text" name="yourname">
<textarea name="chord"></textarea>
<input type="submit">
</form>
<?php
}
?>

Моё предложение:
Используйте Contact Form 7 вместе с Contact Form DB. Вы можете "проектировать" свою форму в админке и вставлять её на фронтенд с помощью простого шорткода.
Расширение Contact Form DB сохраняет ваши данные в базу данных и предоставляет шорткоды для их отображения (или вы можете запрашивать данные напрямую из базы данных, если предпочитаете)

Я попробовал Contact Form 7, и он выглядит отлично, но у меня есть несколько вопросов. Можно ли добавить инкрементный/идентификатор в качестве столбца в таблицу. Также мне нужно установить значения выпадающего списка на основе значений из таблицы. Я никогда раньше не работал с CMS и не знаю, насколько можно и нужно кастомизировать самостоятельно.

@boje вы можете сделать это с помощью плагина-расширения Post My CF7 Form, который реорганизует таблицу в панели управления CF7, позволяя использовать стандартную функциональность WP для добавления пользовательского столбца в таблицу.

Можно ли отображать записи CF7 с одного сайта на другом сайте?

Я собираюсь использовать это решение, но оно кажется очень кастомизированным. Может ли это вызвать проблемы с темами и обновлениями?

На мой взгляд, вам следует разделить логику и шаблонный файл. Метод, обрабатывающий POST-данные, должен находиться в functions.php и инициализироваться с помощью хука инициализации.
Чтобы обрабатывать отправленные данные только для определенного шаблона страницы, можно проверить наличие именованного (по желанию скрытого) поля ввода, уникального для этого шаблона. Также можно воспользоваться функцией is_page_template()

Существуют различные способы хранения данных. Для хранения настроек используется таблица опций, API опций - это правильное место с отдельной записью и массивом в качестве элемента хранения. Однако для хранения данных, которые будут использоваться как записи, и где каждая отправка формы представляет собой отдельный элемент, лучше сохранять их также как записи. Но и здесь есть разные варианты. Вы можете сохранять данные для разных типов записей. По умолчанию используется тип 'post', но также можно сохранять в пользовательских типах записей. Используйте функцию wp_insert_post()
для сохранения данных любого типа записи после отправки формы пользователями. Вы найдете очень хорошие ответы по этой функции, этой теме, а также в просторах интернета. Также можно посмотреть небольшой пример в этом ответе 73653, включая вложения в форме.

используя 'wp_insert_post()', это ведь не только для комментариев. А если нет, то почему хорошо использовать именно эту функцию? Я не понимаю идею таблицы options. Быстрый поиск в Google мне не помог :(

wp_insert_post()
не для комментариев, а для контента записей, создания новой записи. Я обновил свой ответ сейчас, был с мобильного; не очень удобно на WPSE. Другой ответ с подсказкой про плагины — то же самое, Contact Form 7 или другие создают новые записи, но вам нужен плагин. Если вы хотите контролировать это, включая исходный код, и у вас достаточно знаний о программировании, то кастомный плагин для создания записей — лучший вариант.

Спасибо за помощь, Bueltge. Я понимаю wp_insertpost
как вспомогательную функцию для быстрой и безопасной вставки чего-либо в таблицу базы данных. Если у меня есть таблица(имя=Course) с колонками(id, coursename, paricipant, startdate, enddate). Где я указываю имя таблицы? Возможно, я понял всё совершенно неправильно. Пример кода ссылка

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

Спасибо, думаю, мне нужно почитать больше или найти какие-то руководства, чтобы лучше понять настройку

Да, как моя ссылка в другом ответе или ссылка из интернета, например эта.

Вы также можете использовать отличный плагин Contact Form 7 вместе с расширением Post My CF7 Form, которое позволит сохранять любые пользовательские формы в записи, включая изображения в качестве прикрепленных миниатюр, а также выпадающие списки, чекбоксы и радио-кнопки в качестве таксономий.
Плагин Post My CF7 Form обладает богатым функционалом, который можно использовать для дополнительной настройки и изменения способа сохранения ваших форм. Также доступен подробный раздел документации.

Ваше решение хорошее и может отлично работать. Однако, есть несколько ограничений, например:
1) Что насчёт поиска и сортировки записей, отправленных через вашу форму? 2) Как насчёт экспорта данных, заполненных в вашей форме, в Excel, CSV или PDF? 3) Что если вам нужно распечатать введённые данные.
Всё это можно реализовать с помощью плагинов Contact Form 7 + Save Contact Form 7.
Оба плагина бесплатные и широко используются: http://savecontactform7.com/ http://contactform7.com/

Пожалуйста, укажите вашу принадлежность и сделайте ответ соответствующим требованиям вопроса. Это больше похоже на рекламу, чем на настоящее решение.

<?php
/**
Используйте эти строки кода, они работают более чем на 100%
*/
get_header();?> <?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_contact;
$data = array(
'name' => $_POST['aname'],
'email' => $_POST['aemail'],
'subject' => $_POST['asubject'],
'msg' => $_POST['amsg']
);
$format = array(
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'данные сохранены' ;
}
}
else {
?>
<form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
<input type="text" name="aname">
<input type="text" name="aemail">
<input type="text" name="asubject">
<textarea type="text" name="amsg"></textarea>
<input type="submit">
</form>
<?php } ?>
