Come inviare dati da un modulo HTML?
Ho creato un calcolatore di prezzi personalizzato in HTML con un modulo che, quando viene inviato, richiama un file PHP attraverso l'attributo action. Questo file PHP invia poi i dati raccolti all'email della nostra azienda e un'altra email al cliente che ha compilato il modulo.
Tutto funziona su un altro sito web che abbiamo costruito che non è un sito WordPress, ma non ho idea di dove mettere questo file PHP per farlo funzionare in WordPress, dato che sono nuovo su WordPress. Sono già riuscito a inserire il calcolatore all'interno del nostro tema, ma ora sono bloccato. Attualmente stiamo utilizzando BeTheme, ma non è detto che lo manterremo se è più facile fare questo senza di esso.
Qualsiasi aiuto sarà apprezzato.

Sono d'accordo con le altre risposte che nella maggior parte dei casi è meglio utilizzare un plugin per gestire l'invio dei moduli. Tuttavia, ci sono eccezioni a questa regola.
Se ti trovi in una situazione in cui hai bisogno di gestire personalmente l'invio dei moduli, puoi inviare i dati a admin-post.php
. Ecco come configurarlo:
Per prima cosa, imposta il tuo modulo.
<!-- Invia il modulo a admin-post.php -->
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="POST">
<!-- I tuoi campi del modulo vanno qui -->
<!-- Aggiungi un campo nascosto con il nome "action" e un valore univoco che puoi utilizzare per gestire l'invio del modulo -->
<input type="hidden" name="action" value="my_simple_form">
</form>
Ora imposterai un'azione nel tuo file functions.php
. Utilizzerai il valore che hai inserito nel campo nascosto "action" nel modulo.
function my_handle_form_submit() {
// Qui controllerai il tuo modulo dopo l'invio, hai accesso a $_POST qui.
}
// Usa il valore del campo "action" nascosto quando aggiungi le azioni
add_action( 'admin_post_nopriv_my_simple_form', 'my_handle_form_submit' );
add_action( 'admin_post_my_simple_form', 'my_handle_form_submit' );
Ecco un link con maggiori informazioni dal codex - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)

È meglio inserire questo tipo di funzionalità in un plugin piuttosto che integrarlo nel tema. Puoi vedere un esempio di un semplice plugin per il modulo di contatto in WordPress qui: https://www.sitepoint.com/build-your-own-wordpress-contact-form-plugin-in-5-minutes/
Suggerimenti:
- Esegui il tuo codice al momento giusto, trova l'hook più adatto (ad esempio l'hook init).
- usa wp_mail() in WordPress, non la funzione standard mail() di PHP
Come menzionato da @WebElaine sopra: quando crei un plugin per questa funzionalità, non la perderai cambiando tema. Inoltre, la funzionalità sarà facilmente trasferibile tra siti se necessario, e potrai attivarla/disattivarla con un semplice click. Se la funzionalità è specifica solo per questo sito web, è comunque una buona idea evitare di includerla nel functions.php del tema child. Solo le funzionalità specifiche del "tema" (widgets, inclusione di file di stile/js specifici /etc) dovrebbero essere inserite lì. Ad esempio, non includeresti il codice di Contact Form 7 nel tuo tema child

Per favore spiega le tue ragioni per cui è "meglio" scrivere un plugin

C'è un modo più semplice :)
Basta aggiungere tutto il tuo codice come 'Form' + 'parte PHP' in qualsiasi file .php del tuo tema. QUALSIASI! Poi crea il controllo "If else" sotto/con qualsiasi PARAMETRO desideri. In questo modo il form apparirà solo se quel parametro sarà presente nell'URL principale del tuo browser (pagina corrente).
Per esempio:
hai un URL come example.com/ciao-mondo
(qualsiasi URL di articolo)
basta aggiungere in "single.php" qualcosa come:
if ( $_GET['abcde'] == 'abc') {
... il tuo codice ...
}
e ora carica semplicemente la pagina con il seguente URL: example.com/ciao-mondo?abcde=abc
Inoltre imposta l'azione del tuo FORM come:
<form action=""> // senza alcun URL

Esiste un modo rapido e sporco per fare le cose: se si tratta principalmente di uno script WordPress autonomo per il calcolo dei prezzi e l'invio di email, nota che puoi inserire un file PHP arbitrario nella directory root (o in realtà ovunque) nella struttura di file/cartelle del tuo sito, e a meno che tu non abbia regole di riscrittura e/o una configurazione del server che lo impediscano (nota: probabilmente non ne hai), allora può essere semplicemente accessibile in modo indipendente.
Ad esempio, se hai uno script test.php
e il tuo sito WordPress è disponibile online all'indirizzo https://example.com, e inserisci test.php nella directory root del tuo sito (ad esempio dove vedi file come wp-config.php
e cartelle come wp-content/
), allora tu e i visitatori del tuo sito potete accedere a test.php
dal browser all'indirizzo: https://example.com/test.php. Altri form serviti, sia da WordPress che completamente indipendentemente da WordPress, potrebbero inviare dati POST a test.php
.
Per un modo semplice e adatto ai principianti per configurare funzionalità di tipo contact form in WordPress, potresti utilizzare uno dei tanti plugin per form di contatto disponibili. Un'opzione popolare è Contact Form 7: https://it.wordpress.org/plugins/contact-form-7/. Esistono dozzine di opzioni simili.
Un'ottima opzione commerciale per i form che può essere utilizzata per creare form dinamici con campi condizionali, ecc. è Gravity Forms: https://www.gravityforms.com/
Sembra che il tuo script faccia due cose: c'è un "calcolatore di prezzi" e una funzione che "invia email alla tua azienda". Se hai bisogno di integrare un calcolatore con il tuo tema, potresti provare a implementarlo direttamente nei file template del tuo tema, o magari crearlo come Widget: https://developer.wordpress.org/themes/functionality/widgets/. Se il tuo tema definisce "aree widget", il tuo widget potrebbe essere posizionato facilmente in qualsiasi punto di esse dall'area wp-admin.
Spero sia utile! Saluti!
