Tak jak napisałem wczoraj – w związku z nadchodzącymi zmianami związanymi z nową ustawą o prawach konsumenta, która zacznie obowiązywać m.in. sklepy internetowe już w czwartek (25 grudnia) – w kilka sklepach przygotowujemy zmiany z tym związane. Jedną z takich zmian jest automatyczne dołączanie do wiadomości e-mail potwierdzających zakup regulaminu sklepu, oraz formularza odstąpienia od umowy wraz z pouczeniem (pliki PDF). A z racji tego, że ostatnio sklepy internetowe uruchamiamy głównie na platformie WooCommerce (WordPress), to dziś chciałbym przedstawić, jak właśnie w sklepie internetowym opartym o tę platformę wykonać takie zadanie…

WooCommece (WordPress) i dodawanie załącznika do automatycznych wiadomości

Jeśli ktoś z Was do tej pory nie dodawał nigdy „własnego kodu” do WordPressa, to odsyłam do wczorajszego wpisu – dziś przejdziemy od razu do sedna, czyli kodu:

 function webinsider_woocommerce_add_attachments_to_order_email( $attachment, $status, $order ) { $order_status_with_attachments = array( 'customer_processing_order' ); if ( isset( $status ) && in_array( $status, $order_status_with_attachments ) ) { $attachment01_path = get_stylesheet_directory().'/regulamin.pdf'; $attachments[] = $attachment01_path; } return $attachments; } add_filter( 'woocommerce_email_attachments', 'webinsider_woocommerce_add_attachments_to_order_email', 10, 3 ); 

Mamy tu funkcję „webinsider_woocommerce_add_attachments_to_order_email()”, która jest wykonywana w momencie tworzenia przez WooCommerce/WordPress wiadomości e-mail. Funkcja ta, dla wybranych statusów – w naszym przypadku „customer_processing_order” (potwierdzenie zamówienia dla klienta) – dodaje wskazany załącznik (regulamin.pdf) znajdujący się w katalogu naszego szablonu (szablon potomny/child theme).

WooCommerce 4
Wprawdzie artykuł ma już kilka lat, to kod został przetestowany z WooCommerce 4.0 i WordPress 5.4 (działa prawidłowo).

Oczywiście skrypt można zmodyfikować, zależnie od naszych potrzeb:

Więcej załączników

Jeśli potrzebujemy dodać więcej niż jeden załącznik, wystarczy zdublować ten fragment kodu:

$attachment01_path = get_stylesheet_directory().'/regulamin.pdf'; $attachments[] = $attachment01_path; 

Modyfikując go wedle potrzeb:

$attachment02_path = get_stylesheet_directory().'/jakiś-inny-plik.pdf'; $attachments[] = $attachment02_path; $attachment03_path = get_stylesheet_directory().'/i-jeszcze-jeden-plik.pdf'; $attachments[] = $attachment03_path; 

W efekcie otrzymamy coś takiego:

function webinsider_woocommerce_add_attachments_to_order_email( $attachment, $status, $order ) { $order_status_with_attachments = array( 'customer_processing_order' ); if ( isset( $status ) && in_array( $status, $order_status_with_attachments ) ) { $attachment01_path = get_stylesheet_directory().'/regulamin.pdf'; $attachments[] = $attachment01_path; $attachment02_path = get_stylesheet_directory().'/jakiś-inny-plik.pdf'; $attachments[] = $attachment02_path; $attachment03_path = get_stylesheet_directory().'/i-jeszcze-jeden-plik.pdf'; $attachments[] = $attachment03_path; } return $attachments; } add_filter( 'woocommerce_email_attachments', 'webinsider_woocommerce_add_attachments_to_order_email', 10, 3 ); 

Inna ścieżka pliku

Kolejną modyfikacją jest zmiana ścieżki/adresy pliku – w podanym przykładzie korzystamy ze ścieżki naszego szablonu, a konkretnie pliku style.css (get_stylesheet_directory()).

Można tu oczywiście wstawić dowolną ścieżkę, choć musi to być ścieżka bezwzględna, w formacie systemowym (Linux), np.:

/var/www/webinsider.pl/public_html/wp-content/uploads/regulamin.pdf

Natomiast nie zadziała ścieżka „internetowa”, np.:

https://webinsider.pl/wp-content/uploads/regulamin.pdf

I przykład kodu ze zmienioną ścieżką, jak w przykładzie powyżej:

function webinsider_woocommerce_add_attachments_to_order_email( $attachment, $status, $order ) { $order_status_with_attachments = array( 'customer_processing_order' ); if ( isset( $status ) && in_array( $status, $order_status_with_attachments ) ) { $attachment01_path = '/var/www/webinsider.pl/public_html/wp-content/uploads/regulamin.pdf'; $attachments[] = $attachment01_path; } return $attachments; } add_filter( 'woocommerce_email_attachments', 'webinsider_woocommerce_add_attachments_to_order_email', 10, 3 ); 

Załączniki do wiadomości dla innych statusów

W naszym przykładzie załącznik dodajemy do pierwszej wiadomości, jaką otrzymuje klient, czyli z potwierdzeniem zamówienia. Odpowiada za to status „customer_processing_order”.

Oczywiście nie ma przeszkód, by wykorzystać podaną metodę dla innych statusów, np.:

  • new_order – wiadomość dla obsługi sklepu o nowym zamówieniu
  • customer_completed_order – wiadomość dla klienta o gotowym zamówieniu

Wystarczy zmodyfikować jedną linijkę wg schematu:

$order_status_with_attachments = array( 'order_status01', 'order_status02', 'order_status03' ); 

Oczywiście można kod rozbudować, o różne załączniki dla różnych statusów – ale to już zależy od Waszych potrzeb… ;-)

(!) Zgłoś błąd na stronie