Errore fatale: Chiamata a funzione non definita get_option()

5 mag 2014, 16:44:22
Visualizzazioni: 15.6K
Voti: -1

Quando provo a inviare un'email... viene mostrato -

Errore fatale: Chiamata a funzione non definita get_option() in /home/junkie/public_html/sub_demo/wp-content/themes/scroller/includes/contact-form.php alla riga 9

Il mio codice=> contact-form.php

<?php
if($_POST)
{
    //controlla se è una richiesta ajax, esce se non lo è
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        die();
    } 

    $to_Email       = "tanvir.focus@gmail.com"; //Sostituisci con l'indirizzo email del destinatario
    $subject        = 'Ah!! La mia email da Qualcuno là fuori...'; //Riga dell'oggetto per le email

    //controlla che le variabili $_POST siano impostate, esce se manca qualcosa
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userPhone"]) || !isset($_POST["userMessage"]))
    {
        die();
    }

    //Pulisce i dati di input usando filter_var() di 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);

    //validazione php aggiuntiva
    if(strlen($user_Name)<4) // Se la lunghezza è minore di 4 genererà un errore HTTP.
    {
        header('HTTP/1.1 500 Il nome è troppo corto o vuoto!');
        exit();
    }
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //validazione email
    {
        header('HTTP/1.1 500 Inserisci un email valida!');
        exit();
    }
    if(!is_numeric($user_Phone)) //controlla che i dati inseriti siano numeri
    {
        header('HTTP/1.1 500 Solo numeri consentiti nel campo telefono');
        exit();
    }
    if(strlen($user_Message)<5) //controlla messaggio vuoto
    {
        header('HTTP/1.1 500 Messaggio troppo corto! Inserisci qualcosa.');
        exit();
    }

    //procede con l'invio dell'email 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 Impossibile inviare l\'email! Spiacente..');
        exit();
    }else{
        echo 'Ciao '.$user_Name .', Grazie per la tua email! ';
        echo 'La tua email è già arrivata nella mia casella di posta, devo solo controllarla.';
    }
}
?>
3
Commenti

Tanvir, per favore mostrací dove chiami quel codice. Suggerimento: c'è wp_mail() che dovrebbe essere usato invece della funzione nativa PHP mail().

kaiser kaiser
5 mag 2014 17:23:32

Basandomi su questo-- //check if its an ajax request, exit if not-- e altri indizi nella domanda e nel codice, sono abbastanza sicuro che questo sia un duplicato: http://wordpress.stackexchange.com/q/108143/21376

s_ha_dum s_ha_dum
5 mag 2014 17:40:09

votato negativamente perché il codice non corrisponde all'errore

Mark Kaplun Mark Kaplun
15 set 2017 10:54:19
Tutte le risposte alla domanda 2
3

Non vedo alcuna funzione get_option() alla linea 9 o in qualsiasi altra parte del tuo codice.

Dopo una rapida ricerca su Google, la mia ipotesi è che il tuo problema sia lo stesso di questa domanda su stackoverflow

MODIFICA

Come proposto da @Ray nella domanda linkata, incolla questo nel tuo codice per verificare se wp-includes/option.php è incluso:

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

Se non lo è, includilo manualmente:

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

Se questo risolve il tuo problema, non dimenticare di votare positivamente la risposta di Ray.

5 mag 2014 16:56:10
Commenti

Per favore pubblica il codice rilevante da quella domanda/risposta che risolverà il problema dell'OP. Ricorda solo di dare credito alla persona che ha postato la soluzione, che suppongo sia Ray. Il motivo è che se questa domanda viene rimossa da SO, la tua risposta non sarà solo un link morto

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

@PieterGoosen, grazie per la correzione! Spero che la mia modifica risolva questo problema.

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

se hai bisogno di includere "manualmente" un file core così basilare è un'indicazione che lo stai facendo nel modo sbagliato. Inoltre, non dovresti mai presumere di sapere dove si trovano quei file relativamente allo script in esecuzione.

Mark Kaplun Mark Kaplun
15 set 2017 10:57:39
6
-1

Se il tuo file contact-form.php si trova al di fuori dell'installazione di WordPress, dovrai assicurarti di includere il file wp-load.php sopra il tuo codice in questo modo:

<?php include '../../../wp-load.php'; ?>
/* Il resto del tuo codice qui */

Quanto sopra funziona per un file nella radice di una cartella del tema, ma se non sei sicuro di dove potrebbe trovarsi il tuo file .php nella struttura delle directory, puoi sempre utilizzare lo script seguente realizzato da Frankie Jarret:

$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
/* Il resto del tuo codice qui */

MODIFICA:

Si noti che la struttura dell'installazione di WP può essere modificata in modo che il file wp-content si trovi al di fuori dell'albero di installazione, nel qual caso anche il secondo blocco di codice non funzionerebbe. Si tratta di un'eventualità rara, ma la funzionalità è presente e quindi deve essere considerata in uno scenario possibile.

Esistono altre possibilità da considerare che richiederebbero una revisione del codice per utilizzare azioni, filtri e le funzioni integrate di WordPress, evitando così di dover cercare di caricare manualmente le dipendenze corrette all'interno del file. Questo sarebbe il modo migliore per procedere, mentre le soluzioni sopra indicate sono semplicemente soluzioni rapide/economiche.

15 set 2017 09:18:21
Commenti

non dovresti mai cercare di indovinare dove sono installati i file core di WordPress, semplicemente non scrivere codice che dipende da questa conoscenza

Mark Kaplun Mark Kaplun
15 set 2017 10:48:25

@MarkKaplun mi scuso se ti ho frainteso, ma è proprio questo che il secondo snippet di codice risolve? Il primo blocco di codice mostra ciò che suggerisco di usare per raggiungere l'obiettivo richiesto, il secondo blocco affronta il fatto che il file core potrebbe non essere sempre 3 file indietro (../../../wp-load.php) poiché dipenderebbe dalla posizione del tuo file .php personalizzato, e poi fornisce una soluzione estesa che risolve questa preoccupazione. O sto fraintendendo il tuo apparente disappunto?

Frits Frits
15 set 2017 10:54:30

in generale wp-content potrebbe trovarsi al di fuori della struttura di installazione di WordPress. Tranne forse wp-admin, tutto il resto può essere in qualsiasi posizione casuale

Mark Kaplun Mark Kaplun
15 set 2017 10:59:43

... e anche se potresti essere in grado di fare tali supposizioni su un sito specifico, in generale è una cattiva abitudine di programmazione

Mark Kaplun Mark Kaplun
15 set 2017 11:02:44

@MarkKaplun sebbene sia un punto valido, lascerò questa risposta qui poiché mi è stata utile e spero possa aiutare qualcuno in futuro. Potrebbe non essere la soluzione migliore, ma è comunque una soluzione valida. Ho affrontato la tua preoccupazione con un 'modifica', grazie per avermelo fatto notare, ma devo ammettere che non ho mai lavorato con un sito WP che avesse una struttura così radicalmente modificata da rendere inefficace la soluzione sopra proposta. Detto ciò, so che è effettivamente possibile e mi piacerebbe vedere quale sarebbe il tuo workaround in questo caso specifico.

Frits Frits
15 set 2017 11:17:21

è giusto, solo perché qualcosa viene votato negativamente non significa che debba essere eliminato.

Mark Kaplun Mark Kaplun
15 set 2017 11:46:25
Mostra i restanti 1 commenti