Form personalizzato che memorizza i dati nel database
Non ho mai usato WordPress prima, ma ho molta esperienza di programmazione. La mia domanda è: come creare form personalizzati in WordPress?
Ho bisogno di creare un form dove un utente compila alcuni campi di input e al momento dell'invio i dati devono essere memorizzati nel database. Non ho bisogno di alcuna notifica al salvataggio.
Ho anche bisogno di interrogare i dati e ottenere l'output in una tabella HTML.
Grazie
Ho trovato la soluzione al problema da solo. Vedi il codice qui sotto che farà esattamente quello che serve.
Inserisci il codice all'interno del tuo template personalizzato appena creato.
<?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 'Dati salvati correttamente';
}
} else {
?>
<form method="post">
<input type="text" name="yourname">
<textarea name="chord"></textarea>
<input type="submit">
</form>
<?php
}
?>

Il mio suggerimento:
Usa Contact Form 7 insieme a Contact Form DB. Puoi "progettare" il tuo form nel backend e inserirlo nel frontend tramite un semplice shortcode.
L'estensione Contact Form DB ti permette di salvare i dati nel database e ti offre shortcode per visualizzarli (oppure puoi interrogare direttamente il database se preferisci).

Ho provato Contact Form 7 e sembra fantastico, ma ho alcune domande. È possibile aggiungere un identificatore incrementale come colonna alla tabella? Inoltre, ho bisogno di impostare i valori dei dropdown in base ai valori di una tabella. Non ho mai lavorato con un CMS prima d'ora e non so quanto si possa e si debba personalizzare da soli.

@boje puoi farlo con l'estensione Post My CF7 Form, che riorganizza la tabella del dashboard di CF7, permettendoti di utilizzare le funzionalità standard di WP per aggiungere una colonna personalizzata alla tabella.

Posso visualizzare i record di CF7 di un sito in un altro sito?

Ho intenzione di utilizzare questa soluzione, ma sembra essere molto personalizzata e questo potrebbe creare problemi con i temi e gli aggiornamenti?

Secondo me, dovresti separare la logica dal file del template. Il metodo che gestisce i dati POST dovrebbe essere situato in functions.php e inizializzato da un hook di inizializzazione.
Per gestire solo i dati inviati per un template di pagina specifico, potresti verificare la presenza di un campo input nominato (opzionalmente nascosto) che sia unico per quel template. Potresti anche trarre vantaggio dall'uso di is_page_template()

Ci sono diversi modi. Per memorizzare i dati, come le opzioni nella tabella delle opzioni, l'API delle opzioni, è il posto giusto con una voce e un array come elemento di memorizzazione. Ma per memorizzare dati da utilizzare come post e ogni richiesta dal modulo è meglio salvarli anche come post. Anche qui ci sono diverse possibilità. Puoi salvare per diversi tipi di post. Il tipo predefinito è 'post' e puoi anche salvare in un tipo di post personalizzato. Utilizza la funzione wp_insert_post()
per salvare per tutti i tipi di post dopo l'invio del modulo dagli utenti. Troverai risposte molto dettagliate qui su questa funzione, questo argomento e anche nella vastità del web. Puoi anche vedere un piccolo esempio in questa risposta 73653, che include allegati nel modulo.

utilizzando 'wp_insert_post()' non è solo per i commenti. E se non lo è, perché è bene usarlo? Non capisco l'idea della tabella options. Una rapida ricerca su Google non mi aiuta :(

La funzione wp_insert_post()
non è per i commenti, è per il contenuto dei post, crea un nuovo post. Ho aggiornato la mia risposta ora, ero da mobile; non è proprio facile su WPSE. L'altra risposta con il suggerimento sui plugin è la stessa, Contact Form 7 o altri creano nuovi post, ma hai i requisiti di un plugin. Se vuoi controllare questo, anche il codice sorgente e hai abbastanza conoscenze di programmazione, allora un plugin personalizzato per creare post è la soluzione migliore.

Grazie per il tuo aiuto finora Bueltge. La mia comprensione di wp_insertpost
è che è una funzione di aiuto per inserire qualcosa in modo rapido e sicuro in una tabella del database. Se ho una tabella(nome=Corso) con queste colonne(id, nomecorso, partecipante, datainizio, datafine). Dove definisco il nome della tabella? Forse ho capito completamente male. Esempio di codice link

No, la funzione crea dati nelle tabelle predefinite di WordPress; almeno in _posts
e se hai allegati o metadati del post anche nelle altre tabelle, che sono in relazione con il post. Ma tu chiedi di salvare dati da un form in WordPress e penso che questo sia il modo migliore. Hai senza lavoro un'interfaccia utente con molte soluzioni per modificare e mantenere gli elementi del form. Se guardi il codice dal link del mio comportamento, allora vedi la soluzione.

Grazie, penso di aver bisogno di leggere ancora un po' o trovare qualche tutorial per capire meglio l'impostazione

Sì, come il mio link nell'altra risposta o un link dal web, come questo.

Potresti anche utilizzare l'ottimo plugin Contact Form 7 insieme all'estensione Post My CF7 Form che ti permetterà di salvare qualsiasi modulo personalizzato come post, incluse immagini come allegati in evidenza, e input di tipo select/checkbox/radio come tassonomie.
Il plugin Post My CF7 Form offre una ricca funzionalità che può essere sfruttata per personalizzare ulteriormente e modificare il modo in cui i tuoi moduli dovrebbero essere salvati. Esiste anche una sezione di documentazione dettagliata.

La tua soluzione è buona e potrebbe funzionare molto bene. Tuttavia, ci sono alcune limitazioni. Ad esempio:
1) E per quanto riguarda la ricerca e l'ordinamento delle voci inviate tramite il tuo modulo? 2) Come si fa ad esportare i dati inseriti nel modulo in Excel, CSV o PDF? 3) E se volessi stampare i dati inseriti?
Tutto questo può essere ottenuto con i plugin Contact Form 7 + Save Contact Form 7.
Entrambi sono plugin gratuiti e ampiamente utilizzati: http://savecontactform7.com/ http://contactform7.com/

Per favore dichiara la tua affiliazione e rendi la risposta specifica ai requisiti della domanda. Questo sembra più una pubblicità che una soluzione genuina.

<?php
/**
Usa queste righe di codice, funzionano al 100%
*/
get_header();?> <?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_contact;
$data = array(
'nome' => $_POST['aname'],
'email' => $_POST['aemail'],
'oggetto' => $_POST['asubject'],
'messaggio' => $_POST['amsg']
);
$format = array(
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'dati salvati con successo' ;
}
}
else {
?>
<form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
<input type="text" name="aname" placeholder="Nome">
<input type="text" name="aemail" placeholder="Email">
<input type="text" name="asubject" placeholder="Oggetto">
<textarea type="text" name="amsg" placeholder="Messaggio"></textarea>
<input type="submit" value="Invia">
</form>
<?php } ?>
