Error fatal al intentar obtener el correo del administrador en el formulario de contacto

29 jun 2013, 21:48:50
Vistas: 34.9K
Votos: 2

Estoy construyendo un formulario de contacto que necesita enviar todas las consultas a la dirección de correo del administrador.

El archivo PHP que procesa los datos ingresados y envía el correo electrónico solo contiene este código:

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

if($_POST["name"] != "" && $_POST["contact"] != ""  && $_POST["comments"] != "")
{
    echo "¡Su mensaje ha sido enviado! ";
    $name = $_POST["name"];
    $contactOption = $_POST["contactoption"];

    $msg = "Mensaje de: \n";
    $msg .= "Nombre: " .$name;
    $msg .= "\nEmail o Teléfono: " .$contactOption;
    $msg .= "\n\n";
    $msg .= "Mensaje: \n";
    $msg .= $_POST["comments"];
    $msg .= "\n\n";

    $subject = utf8_decode("Mensaje del Formulario de Contacto");
    $headers = utf8_decode("De: " .$name."\r\n");

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

}
?>

El problema es que no puedo usar get_option o get_bloginfo para obtener la dirección de correo del administrador. Esto siempre devuelve un error fatal.

Este archivo reside en mi carpeta del tema hijo. ¿Por qué no puedo usar estas funciones? También he intentado agregar get_header() y get_footer() al archivo, pero estas funciones tampoco son reconocidas.

Soy relativamente nuevo en WordPress. ¿Me estoy perdiendo algo obvio aquí?

3
Comentarios

¿Dónde se muestra el formulario?

onetrickpony onetrickpony
29 jun 2013 22:12:44

@OneTrickPony : en un widget de texto, según un comentario a mi respuesta.

s_ha_dum s_ha_dum
30 jun 2013 02:04:41

simplemente puedes obtener el correo del administrador usando esto: get_bloginfo('admin_email')

alright alright
14 oct 2019 10:21:16
Todas las respuestas a la pregunta 2
3
24

Para obtener el correo electrónico del administrador de WordPress simplemente haz:

$admin_email = get_option('admin_email');
24 jul 2018 16:42:59
Comentarios

Ya tienen esto en su código, lo cual no funciona por las razones descritas en la respuesta aceptada.

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

Quizás para el tipo que preguntó, pero no para las 18k personas que vinieron aquí buscando esta respuesta y no la encontraron, ¿verdad?

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

Sí, esta pregunta tenía un título mal planteado, llevando a mucha gente aquí que solo quería esta simple línea de código.

Gavin Gavin
21 sept 2019 09:13:48
10

Simplemente tener un archivo en la carpeta del tema no significa que WordPress cargará el archivo, o que cuando se acceda, el archivo se cargará en un contexto de WordPress.

Hay dos enfoques que puedo pensar para esto:

Para usar las funciones de WordPress, WordPress necesita cargarse. La forma más fácil de hacerlo es permitir que WordPress cargue el archivo. Coloca tu código anterior en la misma plantilla que contiene tu formulario (presumiblemente es accesible, por lo que WordPress conoce la página). Simplemente envía el formulario a la misma página en lugar de a una diferente. A falta de razones fuertes para hacerlo de otra manera, esto es lo que yo haría.

También podrías usar la API de AJAX para procesar tu formulario.

Nota: Existe una especie de truco para cargar WordPress en archivos externos incluyendo wp-load.php, pero no juegues con eso a menos que tengas una idea muy clara de lo que estás haciendo.

Edición:

Basado en información adicional, ahora creo que una mejor solución es crear un widget adecuado para el formulario.

class Form_Widget_wpse_104728 extends WP_Widget {
  function __construct() {
    $opts = array(
      'description' => 'Mostrar y Procesar Mi Formulario'
    );
    parent::WP_Widget(
      'my-form-content',
      'Algo de PHP',
      $opts
    );
  }
  function widget($args,$instance) {
    // Código PHP aquí
    // Tu código para procesar el formulario
    // El formulario en sí
  }
}
function register_my_widgets() {
  register_widget('Form_Widget_wpse_104728');
}
add_action('widgets_init','register_my_widgets');

Incluso mejor sería poner todo esto en un plugin para que puedas procesar el formulario de forma independiente mediante un hook al inicio de la carga de la página.

29 jun 2013 22:08:44
Comentarios

Para tu primera solución, ¿quieres decir que puedo poner este código en mi page.php? La página que contiene el formulario no es un archivo php físico. Déjame saber si eso es lo que quisiste decir. Mientras tanto, echaré un vistazo a la API AJAX y al hack wp-load :)

Forza Forza
30 jun 2013 01:11:02

Puedes poner el código en el archivo de plantilla que procesa el formulario, preferiblemente una plantilla personalizada solo para el formulario. Tu formulario no es un shortcode, ¿verdad?

s_ha_dum s_ha_dum
30 jun 2013 01:14:30

No, el formulario reside en un textwidget dentro del plugin (pagebuilder)[http://wordpress.org/plugins/siteorigin-panels/]. Pero intentaré crear un archivo de plantilla. Te avisaré si funciona :)

Forza Forza
30 jun 2013 01:55:30

No creo que esto vaya a funcionar. ¿Quieres poner todo el formulario de contacto en la nueva plantilla o solo este código que publiqué arriba? Todo el formulario de contacto no va a funcionar ya que no puedo simplemente llamar a la plantilla desde dentro de un widget de texto :P

Forza Forza
30 jun 2013 02:05:50

El hecho de que tu formulario esté en un widget de texto complica las cosas. La solución AJAX es la mejor de las dos-- que estés lidiando con un widget cuenta como "fuertes razones para hacerlo de otra manera". Aún así, esto es un poco desordenado dado ese imprevisto del widget de texto. Editaré la respuesta con lo que ahora parece ser la mejor solución.

s_ha_dum s_ha_dum
30 jun 2013 02:09:24

Bueno, lo he resuelto ahora usando wp-load.php. Sé que lo desaconsejarías, pero como lo uso estrictamente para este sitio, y la ubicación de wp-load nunca cambiará, esta es la opción más simple :)

Forza Forza
30 jun 2013 02:46:03

Sin embargo, queda un problema: si el usuario no llena el formulario correctamente, se le muestra una página en blanco. Tengo validación, por supuesto, pero ¿hay alguna forma de enviar retroalimentación de validación al formulario de contacto dentro del widget de texto? ¿Se puede hacer esto con JavaScript de alguna manera?

Forza Forza
30 jun 2013 02:47:49

Olvidé mirar tu edición, jaja. Publicaste algunas cosas interesantes allí, tal vez sea mejor que use esa.

Forza Forza
30 jun 2013 02:49:46

Con ese widget tuyo puedo procesar la validación en el propio formulario :P ¡Eso es genial! ¡Gracias s_ha_dum!

Forza Forza
30 jun 2013 02:52:56

Ya tengo el widget funcionando :)

Forza Forza
30 jun 2013 03:50:10
Mostrar los 5 comentarios restantes