Eroare fatală la încercarea de a obține emailul administratorului în formularul de contact

29 iun. 2013, 21:48:50
Vizualizări: 34.9K
Voturi: 2

Construiesc un formular de contact care trebuie să trimită toate solicitările către adresa de email a administratorului.

Fișierul PHP care procesează datele introduse și trimite emailul conține doar acest cod:

<?php
$admin_email = get_option('admin_email');

if($_POST["name"] != "" && $_POST["contact"] != ""  && $_POST["comments"] != "")
{
    echo "Mesajul dumneavoastră a fost trimis! ";
    $name = $_POST["name"];
    $contactOption = $_POST["contactoption"];

    $msg = "Mesaj de la: \n";
    $msg .= "Nume: " .$name;
    $msg .= "\nEmail sau Telefon: " .$contactOption;
    $msg .= "\n\n";
    $msg .= "Mesaj: \n";
    $msg .= $_POST["comments"];
    $msg .= "\n\n";

    $subject = utf8_decode("Mesaj via Formular de Contact");
    $headers = utf8_decode("From: " .$name."\r\n");

    mail($mailTo, $subject, utf8_decode($msg), $headers);

}
?>

Problema este că nu pot folosi get_option sau get_bloginfo pentru a obține adresa de email a administratorului. Acestea returnează întotdeauna o eroare fatală.

Acest fișier se află în directorul temei copil. De ce nu pot folosi aceste funcții? Am încercat să adaug și get_header() și get_footer() în fișier, dar aceste funcții nu sunt nici ele recunoscute.

Sunt relativ nou în WordPress. Am ratat ceva evident aici?

3
Comentarii

Unde este afișat formularul?

onetrickpony onetrickpony
29 iun. 2013 22:12:44

@OneTrickPony : într-un widget text, conform unui comentariu la răspunsul meu.

s_ha_dum s_ha_dum
30 iun. 2013 02:04:41

poți obține simplu emailul administratorului folosind: get_bloginfo('admin_email')

alright alright
14 oct. 2019 10:21:16
Toate răspunsurile la întrebare 2
3
24

Pentru a obține adresa de email a administratorului WordPress, pur și simplu faceți:

$admin_email = get_option('admin_email');
24 iul. 2018 16:42:59
Comentarii

Ei au deja acest lucru în codul lor, care nu funcționează din motivele descrise în răspunsul acceptat.

Jacob Peattie Jacob Peattie
24 iul. 2018 17:35:11

Poate pentru tipul care a întrebat, dar nu și pentru cei 18k de oameni care au ajuns aici în căutarea acestui răspuns și nu l-au găsit, nu?

Lucas Bustamante Lucas Bustamante
24 iul. 2018 17:36:09

Da, această întrebare a fost prost intitulată, aducând mulți oameni aici care voiau doar această simplă linie de cod.

Gavin Gavin
21 sept. 2019 09:13:48
10

Simplu având un fișier în folderul temei nu înseamnă că WordPress va încărca fișierul sau că, atunci când este accesat, fișierul va fi încărcat într-un context WordPress.

Există două modalități de abordare la care mă pot gândi:

Pentru a folosi funcțiile WordPress, WordPress trebuie să fie încărcat. Cea mai ușoară modalitate de a face acest lucru este să lăsăm WordPress să încarce fișierul. Puneți codul dvs. de mai sus în același șablon care conține formularul dvs. - probabil că acesta este accesibil, astfel încât WordPress să cunoască pagina. Pur și simplu trimiteți formularul către aceeași pagină în loc să-l trimiteți către una diferită. În absența unor motive puternice pentru a face altfel, acesta este ceea ce aș face.

De asemenea, puteți utiliza API-ul AJAX pentru a procesa formularul dvs.

Notă: Există un fel de hack pentru a încărca WordPress în fișiere externe prin includerea wp-load.php, dar nu vă jucați cu asta decât dacă știți foarte bine ce faceți.

Editare:

Pe baza informațiilor suplimentare, acum cred că o soluție mai bună este să creați un widget corespunzător pentru formular.

class Form_Widget_wpse_104728 extends WP_Widget {
  function __construct() {
    $opts = array(
      'description' => 'Afișează și Procesează Formularul Meu'
    );
    parent::WP_Widget(
      'my-form-content',
      'Unele PHP',
      $opts
    );
  }
  function widget($args,$instance) {
    // PHP aici
    // Codul dvs. pentru procesarea formularului
    // Formularul în sine
  }
}
function register_my_widgets() {
  register_widget('Form_Widget_wpse_104728');
}
add_action('widgets_init','register_my_widgets');

Chiar mai bine ar fi să puneți totul într-un plugin, astfel încât să puteți procesa formularul independent pe un hook la începutul încărcării paginii.

29 iun. 2013 22:08:44
Comentarii

Pentru prima ta soluție, vrei să spui că pot pune acest cod în fișierul meu page.php? Pagina care conține formularul nu este un fișier php fizic. Spune-mi dacă asta ai vrut să spui. Între timp, voi arunca o privire la API-ul AJAX și hack-ul wp-load :)

Forza Forza
30 iun. 2013 01:11:02

Poți pune codul în fișierul template care procesează formularul - de preferință un template personalizat doar pentru formular. Formularul tău nu este un shortcode, nu-i așa?

s_ha_dum s_ha_dum
30 iun. 2013 01:14:30

Nu, formularul se află într-un widget text în cadrul pluginului (pagebuilder)[http://wordpress.org/plugins/siteorigin-panels/]. Dar voi încerca să creez un fișier template. Îți voi spune dacă funcționează :)

Forza Forza
30 iun. 2013 01:55:30

Nu cred că asta va funcționa. Vrei să pui întregul formular de contact în noul template sau doar acest cod pe care l-am postat mai sus? Întregul formular de contact nu va funcționa pentru că nu pot să apelez template-ul direct dintr-un widget de text :P

Forza Forza
30 iun. 2013 02:05:50

Faptul că formularul tău se află într-un widget de text complică lucrurile. Soluția cu AJAX este cea mai bună dintre cele două - faptul că ai de-a face cu un widget se încadrează la "motive puternice pentru a face altfel". Totuși, situația este destul de haotică având în vedere particularitatea widget-ului de text. Voi edita răspunsul cu ceea ce acum pare a fi cea mai bună soluție.

s_ha_dum s_ha_dum
30 iun. 2013 02:09:24

Ei bine, am rezolvat acum folosind wp-load.php. Știu că ai recomanda împotriva acestei soluții, dar întrucât o folosesc strict pentru acest site, iar locația fișierului wp-load nu se va schimba niciodată, aceasta este cea mai simplă opțiune :)

Forza Forza
30 iun. 2013 02:46:03

Totuși, rămâne o problemă: dacă utilizatorul nu completează corect formularul, i se afișează o pagină goală. Am validare, desigur, dar există vreo modalitate de a trimite feedback-ul de validare către formularul de contact din textwidget? Se poate face acest lucru cumva cu javascript?

Forza Forza
30 iun. 2013 02:47:49

Am uitat să mă uit la ediția ta lol. Ai postat niște lucruri interesante acolo, poate ar fi mai bine să folosesc acea variantă.

Forza Forza
30 iun. 2013 02:49:46

Cu widget-ul tău pot procesa validarea în formularul în sine :P Este foarte tare! Mulțumesc s_ha_dum!

Forza Forza
30 iun. 2013 02:52:56

Deja am widget-ul funcțional :)

Forza Forza
30 iun. 2013 03:50:10
Arată celelalte 5 comentarii