Error fatal: Llamada a función no definida get_option()
Cuando intento enviar un correo... muestra -
Error fatal: Llamada a función no definida get_option() en /home/junkie/public_html/sub_demo/wp-content/themes/scroller/includes/contact-form.php en la línea 9
Mi código=> contact-form.php
<?php
if($_POST)
{
//verificar si es una solicitud ajax, salir si no
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
$to_Email = "tanvir.focus@gmail.com"; //Reemplazar con dirección de correo del destinatario
$subject = 'Ah!! Mi correo de Alguien por ahí...'; //Asunto para los correos
//verificar que las vars $_POST estén definidas, salir si falta alguna
if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userPhone"]) || !isset($_POST["userMessage"]))
{
die();
}
//Sanitizar datos de entrada usando filter_var() de 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);
//validación adicional en php
if(strlen($user_Name)<4) // Si la longitud es menor que 4 lanzará error HTTP.
{
header('HTTP/1.1 500 ¡El nombre es demasiado corto o está vacío!');
exit();
}
if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //validación de email
{
header('HTTP/1.1 500 ¡Por favor ingresa un email válido!');
exit();
}
if(!is_numeric($user_Phone)) //verificar que los datos ingresados sean números
{
header('HTTP/1.1 500 Solo se permiten números en el campo de teléfono');
exit();
}
if(strlen($user_Message)<5) //verificar mensaje vacío
{
header('HTTP/1.1 500 ¡Mensaje demasiado corto! Por favor escribe algo.');
exit();
}
//proceder con el envío de email en 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 ¡No se pudo enviar el correo! Lo siento..');
exit();
}else{
echo 'Hola '.$user_Name .', ¡Gracias por tu correo! ';
echo 'Tu correo ya llegó a mi bandeja de entrada, solo debo revisarlo.';
}
}
?>

No veo ninguna función get_option()
en la línea 9 o en cualquier otra parte de tu código.
Después de una rápida búsqueda, mi suposición sería que tu problema es el mismo que esta pregunta en stackoverflow
EDITAR
Como propuso @Ray en la pregunta enlazada, pega esto en tu código para verificar si wp-includes/option.php
está incluido:
$includedStuff = get_included_files();
print_r($includedStuff);
Si no lo está, inclúyelo manualmente:
include_once('wp-includes\option.php');
Si esto soluciona tu problema, no olvides votar positivamente la respuesta de Ray.

Por favor, publica el código relevante de esa pregunta/respuesta que resuelva el problema del OP. Solo recuerda, por favor da crédito a la persona que publicó la solución, que supongo será Ray. La razón de esto es que si esta pregunta se elimina de SO, tu respuesta no será solo un enlace roto.

@PieterGoosen, ¡gracias por la corrección! Espero que mi edición resuelva esto.

Si tu archivo contact-form.php existe fuera de la instalación de WordPress, necesitarás asegurarte de incluir el archivo wp-load.php encima de tu código de esta manera:
<?php include '../../../wp-load.php'; ?>
/* El resto de tu código aquí */
Lo anterior funciona en un archivo en la raíz de una carpeta de tema, pero si no estás seguro de dónde puede terminar tu archivo .php en el esquema de directorios, siempre puedes usar el siguiente script creado por Frankie Jarret:
$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
/* El resto de tu código aquí */
EDITAR:
Ten en cuenta que la estructura de la instalación de WP puede ajustarse para que el archivo wp-content
quede fuera del árbol de instalación, en cuyo caso el segundo bloque de código tampoco funcionaría. Esto es un caso raro, pero la funcionalidad existe y, por lo tanto, debe considerarse en un escenario posible.
Hay otras posibilidades a considerar que requerirían que revises tu código para hacer uso de acciones, filtros y las funciones integradas de WordPress, lo que evitaría que tengas que intentar cargar las dependencias correctas dentro de tu archivo. Esta sería la mejor manera de hacerlo, las soluciones anteriores son meros atajos rápidos/económicos.

nunca deberías intentar adivinar dónde están instalados los archivos principales de WordPress, simplemente no escribas código que dependa de ese conocimiento

@MarkKaplun mis disculpas si te estoy entendiendo mal, pero ¿no es eso lo que aborda el segundo fragmento de código? El primer bloque de código muestra lo que sugiero que usemos para lograr el objetivo requerido, el segundo bloque de código aborda el hecho de que el archivo principal puede no estar siempre 3 archivos atrás (../../../wp-load.php
), ya que eso dependería de dónde se encuentre tu archivo .php personalizado, y luego ofrece una solución extendida que corrige esa preocupación. ¿O estoy malinterpretando tu aparente queja?

en general, wp-content
podría estar ubicado fuera del árbol de instalación de WordPress. Excepto quizás por wp-admin, todo lo demás puede estar en cualquier lugar aleatorio

... y aunque puedas asumir tales cosas sobre un sitio específico, en general es un mal hábito de programación

@MarkKaplun aunque ese es un punto válido, voy a dejar esta respuesta aquí ya que me ha ayudado y con suerte ayudará a alguien en el futuro. Puede que no sea la solución mejor, pero sigue siendo una solución válida. He abordado tu preocupación con una 'edición', gracias por señalarlo, pero debo admitir que nunca he trabajado con un sitio WP que tuviera una estructura tan severamente ajustada que la solución anterior no funcionara. Dicho esto, sé que es posible, y me encantaría ver cuál es tu solución alternativa en este caso específico.
