我制作了一个wordpress插件。它使用信用卡处理新的支付网关。在成功完成交易后,我关闭订单但无法发送电子邮件。我尝试了一切。我试图在init上调用邮件程序,但它在error.log上失败:
PHP致命错误:调用成员函数get_order_number() 布尔值 ...... /可湿性粉剂内容/插件/ woocommerce /包括/电子邮件/类-WC-电子邮件客户处理,order.php 在第58行
我尝试在init上创建new WC_simplepay();
,但在找不到类时失败。
我尝试使用新功能在类中发送相同的邮件,并使用$this->functionname();
从构造函数调用它。它工作,发送邮件,但支付提供商(或我)不能从url调用此(这是为什么我检查请求参数),因为只有当你在结帐页面时才加载类。
我尝试了全局$woocommerce
...等解决方案,但也没有在init部分工作,只在类中。
启动插件代码:
add_action('plugins_loaded', 'woocommerce_simplepay_init', 0);
function woocommerce_simplepay_init(){
if(!class_exists('WC_Payment_Gateway')) return;
if ($_REQUEST['REFNOEXT']!='')
{
/* .... here are some code regarding the gateway provider ,logging, etc... fully working */
$order_id = explode('_',$_REQUEST['REFNOEXT']);
$order = new WC_Order($order_id[0]);
$order->update_status('processing');
WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger($order_id[0]); // this is generating the error
}
class WC_simplepay extends WC_Payment_Gateway{
public function __construct(){
...
基本上,我如何关闭订单,向客户发送电子邮件,并使用远程URL调用处理此类的提供程序内容?
答案 0 :(得分:0)
您正在接触错误的操作,我建议您挂钩init
,因为它已在所有插件(包括woocommerce)加载后执行。
add_action('init', 'woocommerce_simplepay_init');
function woocommerce_simplepay_init(){
if(!class_exists('WC_Payment_Gateway')) return;
if ($_REQUEST['REFNOEXT']!='')
{
$order_id = explode('_',$_REQUEST['REFNOEXT']);
$order = new WC_Order($order_id[0]);
$order->update_status('processing');
WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger($order_id[0]); // this is generating the error
}
但是,既然你正在使用一个类,我相信在一个类中包含这个函数会更好。