Errore fatale nel tentativo di ottenere l'email dell'amministratore nel modulo di contatto

29 giu 2013, 21:48:50
Visualizzazioni: 34.9K
Voti: 2

Sto creando un modulo di contatto che deve inviare tutte le richieste all'indirizzo email dell'amministratore.

Il file PHP che elabora i dati inseriti e invia l'email contiene solo questo codice:

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

if($_POST["name"] != "" && $_POST["contact"] != ""  && $_POST["comments"] != "")
{
    echo "Il tuo messaggio è stato inviato! ";
    $name = $_POST["name"];
    $contactOption = $_POST["contactoption"];

    $msg = "Messaggio da: \n";
    $msg .= "Nome: " .$name;
    $msg .= "\nEmail o Numero di telefono: " .$contactOption;
    $msg .= "\n\n";
    $msg .= "Messaggio: \n";
    $msg .= $_POST["comments"];
    $msg .= "\n\n";

    $subject = utf8_decode("Messaggio dal Modulo di Contatto");
    $headers = utf8_decode("From: " .$name."\r\n");

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

}
?>

Il problema è che non posso utilizzare get_option o get_bloginfo per ottenere l'indirizzo email dell'amministratore. Questo restituisce sempre un errore fatale.

Questo file si trova nella cartella del tema figlio. Perché non posso utilizzare queste funzioni? Ho anche provato ad aggiungere get_header() e get_footer() al file, ma anche queste funzioni non vengono riconosciute.

Sono relativamente nuovo su WordPress. Mi sta sfuggendo qualcosa di ovvio?

3
Commenti

Dove viene visualizzato il modulo?

onetrickpony onetrickpony
29 giu 2013 22:12:44

@OneTrickPony : in un widget di testo, come da commento alla mia risposta.

s_ha_dum s_ha_dum
30 giu 2013 02:04:41

puoi semplicemente ottenere l'email dell'amministratore usando questo: get_bloginfo('admin_email')

alright alright
14 ott 2019 10:21:16
Tutte le risposte alla domanda 2
3
24

Per ottenere l'email dell'amministratore di WordPress basta fare:

$admin_email = get_option('admin_email');
24 lug 2018 16:42:59
Commenti

Lo hanno già nel loro codice, che non funziona per i motivi descritti nella risposta accettata.

Jacob Peattie Jacob Peattie
24 lug 2018 17:35:11

Forse per il tipo che ha chiesto, ma non per le 18k persone che sono venute qui cercando questa risposta e non l'hanno trovata, giusto?

Lucas Bustamante Lucas Bustamante
24 lug 2018 17:36:09

Sì, questa domanda aveva un titolo poco chiaro, portando molte persone qui che volevano solo questa semplice riga di codice.

Gavin Gavin
21 set 2019 09:13:48
10

Avere semplicemente un file nella cartella del tema non significa che WordPress lo caricherà automaticamente, o che quando vi si accede verrà caricato nel contesto di WordPress.

Ci sono due approcci possibili che mi vengono in mente:

Per utilizzare le funzioni di WordPress, WordPress deve essere caricato. Il modo più semplice per farlo è lasciare che WordPress carichi il file. Inserisci il tuo codice sopra nello stesso template che contiene il tuo modulo - presumibilmente questa pagina è accessibile e WordPress la riconosce. Invece di inviare il modulo a una pagina diversa, invialo alla stessa pagina. In assenza di forti ragioni per fare altrimenti, questo è ciò che farei.

Potresti anche utilizzare l'API AJAX per elaborare il tuo modulo.

Nota: Esiste una sorta di hack per caricare WordPress in file esterni includendo wp-load.php, ma non metterci mano a meno che tu non sappia esattamente cosa stai facendo.

Modifica:

Sulla base di ulteriori informazioni, ora penso che una soluzione migliore sia creare un widget apposito per il modulo.

class Form_Widget_wpse_104728 extends WP_Widget {
  function __construct() {
    $opts = array(
      'description' => 'Visualizza ed Elabora il Mio Modulo'
    );
    parent::WP_Widget(
      'my-form-content',
      'Alcuni PHP',
      $opts
    );
  }
  function widget($args,$instance) {
    // PHP va qui
    // Il tuo codice per elaborare il modulo
    // Il modulo stesso
  }
}
function register_my_widgets() {
  register_widget('Form_Widget_wpse_104728');
}
add_action('widgets_init','register_my_widgets');

Sarebbe ancora meglio inserire l'intera cosa in un plugin, in modo da poter elaborare il modulo indipendentemente su un hook all'inizio del caricamento della pagina.

29 giu 2013 22:08:44
Commenti

Per la tua prima soluzione, intendi che posso inserire questo codice nel mio page.php? La pagina che contiene il modulo non è un file php fisico. Fammi sapere se è questo che intendevi. Nel frattempo darò un'occhiata all'API AJAX e all'hack wp-load :)

Forza Forza
30 giu 2013 01:11:02

Puoi inserire il codice nel file template che elabora il modulo-- preferibilmente un template personalizzato appositamente per il modulo. Il tuo modulo non è uno shortcode, vero?

s_ha_dum s_ha_dum
30 giu 2013 01:14:30

No, il modulo si trova in un textwidget all'interno del plugin (pagebuilder)[http://wordpress.org/plugins/siteorigin-panels/]. Ma cercherò di creare un file template. Ti farò sapere se funziona :)

Forza Forza
30 giu 2013 01:55:30

Non credo che funzionerà. Vuoi inserire l'intero modulo di contatto nel nuovo template o solo questo codice che ho postato sopra? L'intero modulo di contatto non funzionerà perché non posso semplicemente chiamare il template da un text widget :P

Forza Forza
30 giu 2013 02:05:50

Il fatto che il tuo modulo sia in un text widget complica le cose. La soluzione AJAX è la migliore tra le due - il fatto che tu abbia a che fare con un widget conta come "forti ragioni per fare altrimenti". Tuttavia, è un po' un casino vista la complicazione del text widget. Modificherò la risposta con quella che ora sembra la soluzione migliore.

s_ha_dum s_ha_dum
30 giu 2013 02:09:24

Beh, l'ho risolto ora usando wp-load.php. So che mi sconsiglieresti di farlo, ma dato che lo uso strettamente per questo sito, e la posizione di wp-load non cambierà mai, questa è l'opzione più semplice :)

Forza Forza
30 giu 2013 02:46:03

Rimane però un problema: se l'utente non compila correttamente il modulo, gli viene mostrata una pagina vuota. Ho ovviamente la validazione, ma c'è un modo per inviare il feedback di validazione al modulo di contatto all'interno del widget di testo? Si può fare in qualche modo con JavaScript?

Forza Forza
30 giu 2013 02:47:49

Mi sono dimenticato di guardare la tua modifica lol. Hai postato alcune cose interessanti lì, forse è meglio che usi quella.

Forza Forza
30 giu 2013 02:49:46

Con quel widget che hai postato posso elaborare la validazione direttamente nel modulo stesso :P È davvero fantastico! Grazie s_ha_dum!

Forza Forza
30 giu 2013 02:52:56

Ho già il widget funzionante :)

Forza Forza
30 giu 2013 03:50:10
Mostra i restanti 5 commenti