带有jquery $ .post()的wordpress wp_mail()函数

时间:2013-07-24 20:14:35

标签: jquery wordpress post

我正在使用jquery $ .post()函数在wordpress上构建自定义联系表单。

$.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 = "mail@mail.com";
    $subject = "Question from " . $name;
    $success = wp_mail($send_to,$subject,$message);
            if ($succsess) return true
            else return false;
}
?>

我从wordpress收到一个错误:wp_mail()函数没有定义。 我如何让我的php文件使用wp_mail()函数?

感谢。

1 个答案:

答案 0 :(得分:2)

你应该使用wordpress ajax hook来获得wordpress类。

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

我建议稍微清理代码并添加Nonce检查,但您的代码应如下所示:

JS:

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 = "mail@mail.com";
    $subject = "Question from " . $name;
    $success = wp_mail($send_to,$subject,$message);
            if ($succsess) return true
            else return false;
  }

}

要加载你的js文件,vars将它添加到functions.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 );