Error fatal: Llamada a función no definida get_option()

5 may 2014, 16:44:22
Vistas: 15.6K
Votos: -1

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.';
    }
}
?>
3
Comentarios

Tanvir, por favor muéstranos dónde llamas ese código. Pista: Hay wp_mail() que debería usarse en lugar de la función nativa de PHP mail().

kaiser kaiser
5 may 2014 17:23:32

Basado en esto-- //check if its an ajax request, exit if not-- y otras pistas en la pregunta y el código, estoy bastante seguro de que esto es un duplicado: http://wordpress.stackexchange.com/q/108143/21376

s_ha_dum s_ha_dum
5 may 2014 17:40:09

votado negativo porque el código no coincide con el error

Mark Kaplun Mark Kaplun
15 sept 2017 10:54:19
Todas las respuestas a la pregunta 2
3

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.

5 may 2014 16:56:10
Comentarios

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.

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

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

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

si necesitas "incluir manualmente" un archivo básico del núcleo, es una indicación de que lo estás haciendo mal. Además, nunca deberías asumir que sabes dónde están ubicados esos archivos en relación al script que se está ejecutando.

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

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.

15 sept 2017 09:18:21
Comentarios

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

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

@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?

Frits Frits
15 sept 2017 10:54:30

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

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

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

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

@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.

Frits Frits
15 sept 2017 11:17:21

eso está bien, solo porque algo tenga votos negativos no significa que deba ser eliminado.

Mark Kaplun Mark Kaplun
15 sept 2017 11:46:25
Mostrar los 1 comentarios restantes