J'ai remarqué que l'e-mail du client en attente n'est pas disponible, j'ai donc essayé de remplacer les actions par une seule action qui enverrait l'e-mail approprié.Renvoyer par programme un WooCommerce customer_on_hold_order notification par e-mail
Cela semble fonctionner sauf pour le statut d'attente. Je ne vois pas quelle est la différence entre le cas de mise en attente et de traitement autre que ce n'est pas le $available_emails
dans class-wc-meta-box-order-actions.php
et j'ai supprimé tous les autres et ils fonctionnent toujours.
Qu'est-ce que je fais mal? Est-ce un moyen de rendre cela possible?
Mon code est:
function ulmh_resend1($actions) {
$actions['ulmh_resend'] = __('Resend Email', 'text_domain');
return $actions;
}
function ulmh_resend2($order) {
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if ($order->has_status('on-hold')) {
$eml = 'customer_on_hold_order';
}elseif ($order->has_status('processing')) {
$eml = 'customer_processing_order';
}elseif ($order->has_status('completed')) {
$eml = 'customer_completed_order';
} else {
$eml = "nothing";
}
if (! empty($mails)) {
foreach ($mails as $mail) {
if ($mail->id == eml) {
$mail->trigger($order->id);
}
}
}
}
function ulmh_resend3($order_emails) {
$remove = array('new_order', 'cancelled_order', 'customer_processing_order', 'customer_completed_order', 'customer_invoice');
$order_emails = array_diff($order_emails, $remove);
return $order_emails;
}
add_action('woocommerce_order_actions', 'ulmh_resend1');
add_action('woocommerce_order_action_ulmh_resend', 'ulmh_resend2');
add_filter('woocommerce_resend_order_emails_available', 'ulmh_resend3');
Quelle est la question, en particulier? Qu'est-ce que votre code fonctionne/ne fonctionne pas? –
Le code fonctionne correctement si la commande est en cours de traitement ou terminée, mais aucun e-mail n'est envoyé si elle est en attente. Aucun message n'apparaît dans le journal de débogage, il semble juste que customer_on_hold_order n'est pas dans $ mails, mais l'email d'origine est envoyé correctement –