Eroare fatală: Apel către funcția nedefinită get_option()

5 mai 2014, 16:44:22
Vizualizări: 15.6K
Voturi: -1

Când încerc să trimit un email... primesc eroarea -

Eroare fatală: Apel către funcția nedefinită get_option() în /home/junkie/public_html/sub_demo/wp-content/themes/scroller/includes/contact-form.php la linia 9

Codul meu=> contact-form.php

<?php
if($_POST)
{
    //verifică dacă este o cerere ajax, iese dacă nu
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        die();
    } 

    $to_Email       = "tanvir.focus@gmail.com"; //Înlocuiește cu adresa de email a destinatarului
    $subject        = 'Ah!! Emailul meu de la cineva pe aici...'; //Subiectul pentru email

    //verifică dacă variabilele $_POST sunt setate, iese dacă lipsește vreuna
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userPhone"]) || !isset($_POST["userMessage"]))
    {
        die();
    }

    //Sanitizează datele introduse folosind filter_var() PHP.
    $user_Name        = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
    $user_Email       = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
    $user_Phone       = filter_var($_POST["userPhone"], FILTER_SANITIZE_STRING);
    $user_Message     = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);

    //validare PHP suplimentară
    if(strlen($user_Name)<4) // Dacă lungimea este mai mică de 4 caractere va returna o eroare HTTP
    {
        header('HTTP/1.1 500 Numele este prea scurt sau gol!');
        exit();
    }
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //validare email
    {
        header('HTTP/1.1 500 Te rugăm să introduci un email valid!');
        exit();
    }
    if(!is_numeric($user_Phone)) //verifică dacă datele introduse sunt numere
    {
        header('HTTP/1.1 500 Doar numere sunt permise în câmpul telefon');
        exit();
    }
    if(strlen($user_Message)<5) //verifică mesaj gol
    {
        header('HTTP/1.1 500 Mesajul este prea scurt! Te rugăm să scrii ceva.');
        exit();
    }

    //continuă cu trimiterea emailului PHP.
    $headers = 'From: '.$user_Email.'' . "rn" .
    'Reply-To: '.$user_Email.'' . "rn" .
    'X-Mailer: PHP/' . phpversion();

    @$sentMail = mail($to_Email, $subject, $user_Message .'  -'.$user_Name, $headers);

    if(!$sentMail)
    {
        header('HTTP/1.1 500 Nu s-a putut trimite emailul! Ne pare rău..');
        exit();
    }else{
        echo 'Bună '.$user_Name .', Îți mulțumim pentru email! ';
        echo 'Emailul tău a ajuns deja în Inbox, tot ce trebuie să fac este să îl verific.';
    }
}
?>
3
Comentarii

Tanvir, te rugăm să ne arăți unde apelezi acel cod. Sugestie: Există funcția wp_mail() care ar trebui folosită în locul funcției native PHP mail().

kaiser kaiser
5 mai 2014 17:23:32

Bazat pe acest comentariu -- //verifică dacă este o cerere ajax, ieși dacă nu -- și alte indicii din întrebare și cod, sunt sigur că aceasta este o duplicat: http://wordpress.stackexchange.com/q/108143/21376

s_ha_dum s_ha_dum
5 mai 2014 17:40:09

am dat vot negativ deoarece codul nu corespunde cu eroarea

Mark Kaplun Mark Kaplun
15 sept. 2017 10:54:19
Toate răspunsurile la întrebare 2
3

Nu văd nicio funcție get_option() pe linia 9 sau oriunde altundeva în codul tău.

După o căutare rapidă pe Google, presupun că problema ta este aceeași ca această întrebare de pe stackoverflow

EDIT

După cum a sugerat @Ray în întrebarea menționată mai sus, adaugă acest cod pentru a verifica dacă wp-includes/option.php este inclus:

$includedStuff = get_included_files();
print_r($includedStuff);

Dacă nu este inclus, include-l manual:

include_once('wp-includes\option.php');

Dacă funcționează, nu uita să votezi răspunsul lui Ray.

5 mai 2014 16:56:10
Comentarii

Te rog să postezi codul relevant din acea întrebare/răspuns care va rezolva problema OP-ului. Doar ține minte, te rog să dai credit persoanei care a postat soluția, care probabil va fi Ray. Motivul pentru aceasta este că, dacă această întrebare va fi ștearsă de pe SO, răspunsul tău nu va fi doar un link mort.

Pieter Goosen Pieter Goosen
5 mai 2014 17:13:43

@PieterGoosen, mulțumesc pentru corectare! Sper că ediția mea rezolvă acest lucru.

Petr Cibulka Petr Cibulka
5 mai 2014 18:09:36

dacă trebuie să incluzi "manual" un fișier de bază atât de simplu, acesta este un indiciu că faci ceva greșit. În plus, nu ar trebui să presupui niciodată că știi unde se află acele fișiere în raport cu scriptul care rulează.

Mark Kaplun Mark Kaplun
15 sept. 2017 10:57:39
6
-1

Dacă fișierul tău contact-form.php există în afara instalării WordPress, va trebui să te asiguri că incluzi fișierul wp-load.php înaintea codului tău, astfel:

<?php include '../../../wp-load.php'; ?>
/* Restul codului tău aici */

Exemplul de mai sus funcționează pentru un fișier în directorul rădăcină al unui tema, dar dacă nu ești sigur unde se poate afla fișierul tău .php în structura de directoare, poți folosi întotdeauna scriptul de mai jos creat de Frankie Jarret:

$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
/* Restul codului tău aici */

EDIT:

Te rugăm să iei în considerare că structura instalării WP poate fi ajustată astfel încât fișierul wp-content să fie în afara arborelui de instalare, caz în care al doilea bloc de cod nu va funcționa. Aceasta este o situație rară, dar funcționalitatea există și, prin urmare, trebuie luată în calcul într-un posibil scenariu.

Există și alte posibilități de luat în considerare care ar necesita revizuirea codului tău pentru a utiliza acțiuni, filtre și funcțiile încorporate ale WordPress, care te-ar scuti de încercarea de a încărca corect dependențele în fișierul tău. Aceasta ar fi cea mai bună abordare, soluțiile de mai sus sunt doar soluții rapide/ieftine.

15 sept. 2017 09:18:21
Comentarii

nu ar trebui să încerci niciodată să ghicești unde sunt instalate fișierele de bază ale WordPress, pur și simplu nu scrie cod care depinde de astfel de cunoștințe

Mark Kaplun Mark Kaplun
15 sept. 2017 10:48:25

@MarkKaplun îmi cer scuze dacă te-am înțeles greșit, dar despre asta se ocupă al doilea fragment de cod? Primul bloc de cod arată ceea ce sugerez să folosim pentru a atinge scopul dorit, al doilea bloc de cod abordează faptul că fișierul de bază poate să nu fie întotdeauna la 3 fișiere înapoi (../../../wp-load.php), deoarece asta ar depinde de locația fișierului tău personalizat .php, și apoi oferă o soluție extinsă care rezolvă această problemă. Sau am înțeles greșit nemulțumirea ta aparentă?

Frits Frits
15 sept. 2017 10:54:30

în general, wp-content ar putea fi localizat în afara structurii de instalare WordPress. Cu excepția poate a wp-admin, orice altceva poate fi în orice locație aleatorie

Mark Kaplun Mark Kaplun
15 sept. 2017 10:59:43

.... și deși poți presupune astfel de lucruri despre un anumit site, este în general un obicei prost de programare

Mark Kaplun Mark Kaplun
15 sept. 2017 11:02:44

@MarkKaplun deși acesta este un punct valid, voi lăsa acest răspuns aici, deoarece m-a ajutat pe mine și sper să ajute pe cineva în viitor. Poate nu este cea mai bună soluție, dar este în continuare o soluție validă. Am abordat preocuparea ta cu un 'edit', îți mulțumesc pentru observație, dar trebuie să admit că nu am lucrat niciodată cu un site WP care avea o structură atât de puternic ajustată încât soluția de mai sus să nu funcționeze. Cu toate acestea, știu că este într-adevăr posibil și aș dori să văd care este soluția ta în acest caz specific.

Frits Frits
15 sept. 2017 11:17:21

este în regulă, doar pentru că ceva este downvoted nu înseamnă că ar trebui șters.

Mark Kaplun Mark Kaplun
15 sept. 2017 11:46:25
Arată celelalte 1 comentarii