Come inviare dati da un modulo HTML?

7 ago 2018, 18:19:53
Visualizzazioni: 31.5K
Voti: 5

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.

1
Commenti

La funzionalità appartiene davvero a un plugin, non al tema. Se mai dovessi cambiare tema, non vorresti perdere il tuo modulo/calcolatore. Quindi, valuta la possibilità di creare plugin personalizzati - oppure, dato che ci sono tantissimi plugin per moduli WP già disponibili, usa semplicemente uno di quelli. Questa è probabilmente la soluzione migliore perché verranno costantemente aggiornati per la sicurezza e la compatibilità con WordPress. Se vuoi davvero il tuo HTML/CSS personalizzato per il modulo, convertilo in un plugin personalizzato.

WebElaine WebElaine
7 ago 2018 18:46:12
Tutte le risposte alla domanda 4
0

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)

7 ago 2018 19:37:51
2

È 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

7 ago 2018 18:47:00
Commenti

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

Lee Goddard Lee Goddard
2 giu 2020 15:44:24

Potresti considerare di aggiungerlo alla tua risposta, piuttosto che come replica al mio commento! Le risposte sono più utili quando spiegano la loro logica e includono link alla documentazione.

Lee Goddard Lee Goddard
15 giu 2020 14:46:19
0

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
21 apr 2019 20:06:39
0

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!

7 ago 2018 18:57:39