Życie programisty to pasmo niespodzianek. Teoretycznie myślimy, że o danej platformie wiemy już absolutnie wszystko i nagle zaskakuje nas coś co właściwie powinniśmy przewidzieć już dawno temu.
Historia pewnego klienta…
Inspiracją do tego wpisu była historia klienta, któremu stworzyłem małą platformę e-learningową opartą o WooCommerce, na której stworzono kilka bezpłatnych kursów. Głównym założeniem portalu było zbieranie Leadów od potencjalnych klientów, a kursy pozwalały łatwo segmentować klientów od początkujących po już zaawansowanych w danym temacie.
Klient uruchomił szeroką akcję promocyjną, która przerosła oczekiwania i otrzymywał setki emaili z WooCommerce, które nie tylko zapchały skrzynkę, ale też w pewnym momencie zablokowały wysyłkę maili na serwerze z powodu przekroczenia limitów.
Usunięcie ceny „Za Darmo” w WooCommerce
Czas zrozumieć problem…
WooCommerce już taki jest – wysyła maile do klienta i to, aż dwa – potwierdzenie zamówienia i założenie konta, a informacje o zamówieniu otrzymuje też administrator. Oznacza to, że każde zamówienie generuje trzy maile, które w zasadzie (poza mailem do klienta i to nie zawsze) są absolutnie zbędne.
Oczywiście możemy w WooCommerce wyłączyć ten email poprzez opcje powiadomień emailowych, ale w przypadku gdy mamy też produkty płatne może okazać się to niekoniecznie dobym rozwiązaniem i stąd dzisiejszy wpis.
Wyłączenie wysyłania e-maila o otrzymaniu bezpłatnego zamówienia w WooCommerce do Administratora
Dodaj ten kod do pliku functions.php najlepiej motywu potomnego lub wtyczki funkcyjnej.
Funkcja wyłączy wysyłanie wiadomości e-mail do administratora z potwierdzeniem otrzymania zamówienia.
add_filter('woocommerce_email_enabled_new_order', function($enabled, $order) {
if ($order instanceof WC_Order) {
$order_total = floatval($order->get_total());
if ($order_total == 0) {
return false;
}
}
return $enabled;
}, 10, 2);
Wyłączenie wysyłania potwierdzenie otrzymania bezpłatnego zamówienia dla klienta
W moim przypadku blokada była zasadna ponieważ całą wysyłkę emailową obsługiwał system Marketing Automation i nie potrzebowałem dodatkowych wiadomości od WooCommerce. W tym celu aplikujemy swoją funkcję jako filtr do hooka – woocommerce_email_recipient_customer_completed_order.
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'jcz_bezmaila_woo_zerozl', 10, 2 );
function jcz_bezmaila_woo_zerozl( $recipient, $order ) {
$page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
if ( 'wc-settings' === $page ) {
return $recipient;
}
if ( (float) $order->get_total() === '0.00' ) $recipient = '';
return $recipient;
}
Tym oto sposobem zbędne dwie wiadomości nie będą już wysyłanie ani do Ciebie, ani do klienta.