2013-07-24 2 views
1

Я создаю специальную форму контакта на wordpress, используя функцию jquery $ .post().

$.post(tmpl_dir + '/bugreport.php',{ name:name, email:email, message:message }, function(data) { 
       if (data) alert('thanks for answer') 
       else alert('error sending, please try again.'); 

      }) 

(tmlp_dir это тема путь к каталогу)

здесь bugreport.php файл:

<?php 
if (isset($_POST['name']) && isset($_POST['email']) &&isset($_POST['message'])) { 
    $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; 
    $send_to = "[email protected]"; 
    $subject = "Question from " . $name; 
    $success = wp_mail($send_to,$subject,$message); 
      if ($succsess) return true 
      else return false; 
} 
?> 

Я получаю сообщение об ошибке от WordPress, который говорит: wp_mail() функция не определена. Как я могу позволить своему файлу php использовать функцию wp_mail()?

Спасибо.

ответ

2

Вы должны использовать wordpress ajax hook, чтобы получить классы wordpress.

http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

Я бы рекомендовал очистки Кодекса немного и добавить Nonce чек, но ваш код должен выглядеть следующим образом:

ЯШ:

jQuery.post(
    MyAjax.ajaxurl, 
    { 
     'action': 'send_message', 
     'name':'name', 
     'email':'email', 
     'message':'message' 
    }, 
    function(response){ 
     alert('The server responded: ' + response); 
    } 
); 

PHP:

add_action('wp_ajax_send_message', 'do_send_message'); 

function do_send_message() { 

    if (isset($_POST['name']) && isset($_POST['email']) &&isset($_POST['message'])) { 
    $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; 
    $send_to = "[email protected]"; 
    $subject = "Question from " . $name; 
    $success = wp_mail($send_to,$subject,$message); 
      if ($succsess) return true 
      else return false; 
    } 

} 

Чтобы загрузить файл js и vars, добавьте его в функцию ion.php или ваш плагин.

$myvars = array( 
    'ajaxurl' => admin_url('admin-ajax.php'), 
); 
wp_enqueue_script('my-ajax-request', plugins_url('/path/to/somefile.js', __FILE__)); 
wp_localize_script('my-ajax-request', 'MyAjax', $myvars); 
+0

Спасибо, а как насчет 'include (wp-load.php)'? – aleXela

+1

@alexela, не делайте этого! См .: http://stackoverflow.com/q/13498959/1287812 – brasofilo

+0

ReferenceError: ajaxurl не определен. Получение этой ошибки. – aleXela

Смежные вопросы