Cum să trimiți date dintr-un formular HTML?
Am construit un calculator de prețuri personalizat în HTML cu un formular care, atunci când este trimis, apelează un fișier PHP prin atributul action, iar acest fișier PHP trimite apoi datele colectate către emailul companiei noastre și un alt email către clientul care a completat formularul.
Totul funcționează pe un alt site web pe care l-am construit care nu este un site WordPress, dar nu știu unde să pun acest fișier PHP pentru a-l face să funcționeze în WordPress, deoarece sunt nou în WordPress. Am reușit deja să pun calculatorul în tema noastră, dar acum m-am blocat. În prezent folosim BeTheme, dar nu ne vom limita neapărat la aceasta, dacă este mai ușor să facem acest lucru fără ea.
Orice ajutor va fi apreciat.

Sunt de acord cu celelalte răspunsuri că de cele mai multe ori este mai bine să folosești un plugin pentru gestionarea trimiterii formularelor. Cu toate acestea, există excepții de la această regulă.
Dacă te afli într-o situație în care trebuie să procesezi singur trimiterea formularelor, poți trimite date către admin-post.php
. Iată cum poți configura acest lucru:
Mai întâi configurează-ți formularul.
<!-- Trimite formularul către admin-post.php -->
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="POST">
<!-- Câmpurile tale de formular vor fi aici -->
<!-- Adaugă un câmp ascuns în formular cu numele "action" și o valoare unică pe care o poți folosi pentru a gestiona trimiterea formularului -->
<input type="hidden" name="action" value="my_simple_form">
</form>
Acum vei configura o acțiune în fișierul tău functions.php
. Vei folosi valoarea pe care ai folosit-o în câmpul ascuns "action" din formular.
function my_handle_form_submit() {
// Aici vei controla formularul după ce a fost trimis, ai acces la $_POST aici.
}
// Folosește valoarea câmpului tău ascuns "action" când adaugi acțiunile
add_action( 'admin_post_nopriv_my_simple_form', 'my_handle_form_submit' );
add_action( 'admin_post_my_simple_form', 'my_handle_form_submit' );
Iată un link către mai multe informații din codex - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)

Cel mai bine este să plasați acest tip de funcționalitate într-un plugin. Nu o înghesuiți în tema. Puteți vedea un exemplu de plugin simplu pentru formular de contact în WordPress aici: https://www.sitepoint.com/build-your-own-wordpress-contact-form-plugin-in-5-minutes/
Sfaturi:
- Executați codul la momentul potrivit, găsiți hook-ul care vă se potrivește (de ex. hook-ul init).
- folosiți wp_mail() în WordPress, nu funcția standard mail() din PHP
După cum a menționat @WebElaine mai sus: atunci când creați un plugin pentru această funcționalitate, nu o veți pierde la schimbarea temei. De asemenea, funcționalitatea va fi ușor de transferat între site-uri dacă este necesar și o puteți activa/dezactiva cu un singur click. Chiar dacă funcționalitatea este specifică doar acestui website, este totuși o idee bună să nu o includeți în functions.php al temei (child theme). Doar funcționalitățile specifice temei (widget-uri, includerea fișierelor de stil/js etc.) ar trebui plasate acolo. De exemplu, nu ați include codul Contact Form 7 în child theme.

Te rog să explici motivele pentru care este „cel mai bine” să scrii un plugin

Există o cale mai ușoară :)
Pur și simplu adaugă tot codul tău ca 'Formular' + 'Partea PHP' în oricare fișier .php al temei tale. ORICARE! Apoi creează verificarea "If else" sub/cu orice PARAMETRU dorești. Astfel, formularul va apărea doar dacă acel parametru va fi în URL-ul principal al browserului tău (pagina curentă).
De exemplu:
ai un URL ca example.com/hello-world
(orice URL de articol)
doar adaugă în "single.php" ceva de genul:
if ( $_GET['abcde'] == 'abc') {
... codul tău ...
}
și acum încarcă pagina sub următorul URL: example.com/hello-world?abcde=abc
De asemenea, fă acțiunea FORMULARULUI tău ca:
<form action=""> // fără niciun URL

Există o metodă rapidă și improvizată de a face lucrurile: dacă acesta este un script WordPress în mare măsură independent și un calculator de prețuri + trimitere de email-uri, reține că poți pune un fișier PHP arbitrar în directorul rădăcină (sau oriunde altundeva) în arborele de fișiere/directoare al site-ului tău, și dacă nu ai reguli de rescriere și/sau o configurare de server care să intervină (notă: probabil că nu ai), atunci acesta poate fi accesat simplu independent.
De exemplu, dacă ai un script test.php
și site-ul tău WordPress este disponibil online la https://example.com, și plasezi test.php
în directorul rădăcină al site-ului (de exemplu, unde vezi fișiere precum wp-config.php
și foldere precum wp-content/
), atunci tu și vizitatorii site-ului puteți accesa test.php
dintr-un browser la adresa: https://example.com/test.php. Alte formulare servite, fie de WordPress, fie complet independent de WordPress, pot trimite date prin POST către test.php
.
Pentru o metodă prietenoasă pentru începători de a configura funcționalități de tip contact în WordPress, ai putea utiliza unul dintre numeroasele pluginuri de formular de contact disponibile. O opțiune populară este Contact Form 7: https://en-ca.wordpress.org/plugins/contact-form-7/. Există zeci de opțiuni similare.
O excelentă opțiune comercială pentru formulare care poate fi utilizată pentru a crea formulare dinamice cu câmpuri condiționale etc. este Gravity Forms: https://www.gravityforms.com/
Se pare că scriptul tău ar putea face două lucruri: există un "calculator de prețuri" și un lucru care "trimite email companiei tale". Dacă trebuie să integrezi un calculator în tema ta, ai putea încerca să-l implementezi direct în fișierele de șablon ale temei sau poate să-l creezi ca un Widget: https://developer.wordpress.org/themes/functionality/widgets/. Dacă tema ta definește "zone de widget-uri", widget-ul tău poate fi plasat oriunde în ele cu ușurință din wp-admin.
Sper că acest lucru te ajută! Noroc!
