在Woocomerce完成订单电子邮件发送后插入操作

时间:2016-05-23 13:00:29

标签: filter woocommerce hook action

我想完成以下任务:

通过Woocomerce完成订单电子邮件,生成pdf并作为附件发送。发送电子邮件后,将在服务器上删除pdf。

我使用woocommerce_email_attachments过滤器实现了第一部分。

add_filter('woocommerce_email_attachments', 'attach_ticket_pdf_to_email', 10,  3);

现在出于安全考虑,我想删除电子邮件发送后在服务器上生成的pdf。

我发现了可以挂钩的Action'woocommerce_order_status_completed',但如果我从管理员后端重新发送完成订单电子邮件,则不会调用此消息。

是否有一些钩子或过滤器或动作被调用以发送Woocomerce中的电子邮件。或者在发送电子邮件之后?

在那里,我想调用一个可以再次删除这些pdf的函数。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

电子邮件以默认优先级10触发。因此,我认为您可以使用更高/更高优先级调用您的函数,并且发送电子邮件后将其解雇。

如果您重新发送来自管理员的订单电子邮件,您可以使用woocommerce_after_resend_order_email挂钩。这会传递一个$order对象,因此您无法将完全相同的函数附加到两者。

以下是我将如何开始:

add_action( 'woocommerce_order_status_completed', 'delete_pdf', 20 );
function delete_pdf( $order_id ){
    // do your thing to delete the file
}

add_action( 'woocommerce_after_resend_order_email', 'after_resend', 10, 2 );
function after_resend( $order, $action ){
    if( $action == 'customer_completed_order' ){
        delete_pdf( $order->id );
    }
}