Formular personalizat care stochează datele în baza de date
Nu am folosit niciodată WordPress înainte, dar am multă experiență în programare. Întrebarea mea este, cum pot crea formulare personalizate în WordPress?
Am nevoie să creez un formular în care un utilizator completează câteva câmpuri de intrare și la trimitere datele să fie stocate în baza de date. Nu am nevoie de nicio notificare la salvare.
De asemenea, trebuie să pot interoga datele și să obțin rezultatul într-un tabel HTML.
Mulțumesc

Am găsit singur soluția problemei. Vezi codul de mai jos, acesta va face exact asta.
Pune codul în interiorul șablonului personalizat pe care l-ai creat recent.
<?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 'datele au fost salvate' ;
}
} else {
?>
<form method="post">
<input type="text" name="yourname">
<textarea name="chord"></textarea>
<input type="submit">
</form>
<?php
}
?>

Sugestia mea:
Folosește Contact Form 7 plus Contact Form DB. Poți "proiecta" formularul în backend și să-l adaugi în frontend folosind un simplu shortcode.
Extensia Contact Form DB îți permite să salvezi datele în baza de date și îți oferă shortcode-uri pentru a le afișa (sau poți interoga direct datele din baza de date dacă preferi)

Am încercat Contact Form 7 și arată excelent, dar am câteva întrebări. Este posibil să adaug o coloană incrementală/identificatoare în tabel. De asemenea, am nevoie să setez valorile dropdown-ului bazate pe valorile unui tabel. Nu am lucrat niciodată cu un CMS înainte și nu știu cât de mult ar trebui și ai nevoie să personalizezi singur.

@boje poți cu extensia Post My CF7 Form, ea reorganizează tabelul din dashboard-ul CF7, permițându-ți să folosești funcționalitatea standard WP pentru a adăuga o coloană personalizată în tabel.

Am să folosesc această soluție, dar pare a fi foarte personalizată și ar putea fi o problemă cu temele și actualizările?

Din punctul meu de vedere, ar trebui să separi logica de fișierul de șablon. Metoda ta care gestionează datele POST ar trebui să fie localizată în functions.php și inițializată printr-un hook de inițializare.
Pentru a gestiona doar datele trimise pentru un anumit șablon de pagină, ai putea verifica existența unui câmp de input numit (opțional ascuns) care este unic pentru acel șablon. De asemenea, ai putea beneficia de utilizarea funcției is_page_template()

Există diferite metode de stocare a datelor. Pentru opțiuni, se folosește tabelul de opțiuni, API-ul de opțiuni, locul potrivit cu o intrare și un array ca element de stocare. Dar pentru a stoca datele care urmează să fie folosite ca postări și pentru fiecare cerere din formular, este mai bine să le salvați tot ca postări. Dar și aici există diferite posibilități. Puteți salva pentru diferite tipuri de postări. Implicit este 'post' și de asemenea puteți salva într-un tip de postare personalizat. Folosiți funcția wp_insert_post()
pentru a salva pentru toate tipurile de postări după trimiterea formularului de la utilizatori. Veți găsi răspunsuri foarte bune aici pentru această funcție, acest subiect și de asemenea pe internet. Puteți vedea și un mic exemplu în acest răspuns 73653, care include atașamente în formular.

folosind 'wp_insert_post()' nu este doar pentru comentarii. Și dacă nu, de ce este bine să-l folosești? Nu înțeleg ideea tabelului de opțiuni. O căutare rapidă pe Google nu mă ajută :(

wp_insert_post()
nu este pentru comentarii, este pentru conținutul postărilor, pentru a crea o postare nouă. Am actualizat acum răspunsul meu, am fost de pe telefon; nu prea ușor pe WPSE. Celălalt răspuns cu sugestia pentru plugin-uri este același, Contact Form 7 sau altele creează postări noi, dar ai cerința unui plugin. Dacă vrei să controlezi asta, inclusiv sursa și ai suficiente cunoștințe de codare, atunci un plugin personalizat pentru a crea postări este cea mai bună variantă.

Mulțumesc pentru ajutor până acum, Bueltge. Înțelegerea mea despre wp_insertpost
este că este o funcție de ajutor pentru a insera rapid și în siguranță ceva într-un tabel de baze de date. Dacă am un tabel(nume=Curs) cu aceste coloane(id, numecurs, participanti, datastart, datasfarsit). Unde definesc numele tabelului? Poate am înțeles complet greșit. Exemplu de cod link

Nu, funcția creează date în tabelele implicite WordPress; cel puțin în _posts
și dacă aveți atașamente sau metadate ale postărilor, și în celelalte tabele care sunt în relație cu postarea. Dar tu ai cerut să salvezi date din formular în WordPress și cred că aceasta este cea mai bună metodă. Ai, fără efort suplimentar, o interfață de utilizator cu multe soluții pentru editarea și întreținerea elementelor din formular. Dacă vezi codul din link-ul meu din comportament, atunci vei vedea soluția.

Mulțumesc, cred că trebuie să mai citesc sau să găsesc niște tutoriale pentru a înțelege mai bine configurarea

Da, precum link-ul meu din celălalt răspuns sau un link de pe web, precum acesta.

De asemenea, puteți utiliza excelentul plugin Contact Form 7 împreună cu extensia Post My CF7 Form, care vă va permite să salvați orice formulare personalizate într-un articol, inclusiv imagini ca atașamente principale și selectări/casete de bifare/butoane radio ca taxonomii.
Pluginul Post My CF7 Form are o funcționalitate bogată care poate fi utilizată pentru a personaliza și ajusta în continuare modul în care formularele dvs. ar trebui să fie salvate. Există și o secțiune detaliată de documentație.

Soluția dumneavoastră este bună și poate funcționa foarte bine. Dar, există câteva limitări. De exemplu:
1) Ce se întâmplă cu căutarea și sortarea intrărilor care sunt postate prin formularul dumneavoastră? 2) Cum rămâne cu exportul datelor completate în formularul dumneavoastră în Excel, CSV sau PDF? 3) Ce se întâmplă dacă doriți să tipăriți datele introduse.
Toate acestea pot fi realizate cu plugin-urile Contact Form 7 + Save Contact Form 7.
Ambele sunt plugin-uri gratuite și utilizate pe scară largă: http://savecontactform7.com/ http://contactform7.com/

Te rog să menționezi afilierea ta și să faci răspunsul specific cerințelor întrebării. Acest text pare mai mult o reclamă decât o soluție autentică.

<?php
/**
Folosește aceste linii de cod, funcționează în peste 100% din cazuri
*/
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 'datele au fost salvate' ;
}
}
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 } ?>
