我想完成以下任务:
通过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的函数。
有什么想法吗?
答案 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 );
}
}