需要澄清如何正确调用wp_mail()

时间:2012-03-10 作者:Nick Spreitzer

我想打电话wp_mail() 从一个非模板PHP文件,但当我这样做时,它失败了,我不明白为什么。例如,假设我有一个PHP文件,它只包含以下内容:

<?php
    echo \'hi\';
    $mail_sent = wp_mail(\'[email protected]\', \'subject\', \'message\');
    echo $mail_sent;
?>
如果我直接在浏览器中加载该PHP文件,则只会打印“hi”。如果我删除echo \'hi\'; 总之,没有打印任何内容,这向我表明wp_mail() 无法在此特定上下文中调用。但是,如果我添加/* Template Name: SomeName */ 并使用创建新页面SomeName 作为其模板,wp_mail() 正确执行。很明显,我缺少一些关于如何正确调用的关键信息wp_mail().

我之所以要这样做,是因为我使用的主题附带了一个通过ajax请求提交电子邮件的联系人表单,大致如下所示:

form.submit(function() {
    $j.ajax({
        type: \'GET\',
        url: "http://www.example.com/wp-content/themes/themeX/send_mail.php",
        data: form.serialize(),
    });
});
目前,send_mail.php 调用PHPmail() “有效”但极其脆弱的功能。我想让它打电话wp_mail() 所以我可以利用this plugin 它使用SMTP服务器发送邮件。所以我的问题是:我怎样才能wp_mail() 在这种情况下工作?

谢谢

3 个回复
最合适的回答,由SO网友:helenhousandi 整理而成

独立脚本不会加载WordPress,因此它没有wp_mail() 作用WordPress有自己的内置Ajax处理程序,您可以利用这些处理程序并访问这些Ajax调用中的所有WordPress功能。

SO网友:James Bruce

或者,在独立脚本中包含Wordpress函数,如下所示

require_once(\'wp-blog-header.php\'); 
我发现WP-ajax函数并不总是做事情的最佳方式,因此编写自己的ajax处理程序是非常有效的。

SO网友:Brooke.

wp\\U邮件是Pluggable Function 因此,您应该能够调用wp includes/pluggable。然后可以使用wp\\u mail()。

结束

相关推荐