Automatyzacja w WooCommerce to ogromne ułatwienie dla właścicieli sklepów internetowych. Dzięki wtyczce ShopMagic można ustawiać spersonalizowane e-maile wysyłane do klientów lub zespołu obsługi w zależności od zdarzeń w sklepie.
Jednak czasami pojawiają się wyzwania, które wymagają od nas kreatywnego podejścia — szczególnie gdy dane w zamówieniu zapisane są w formacie mało czytelnym dla człowieka, np. w timestamp UNIX.
W tym studium przypadku pokażemy, jak rozwiązaliśmy dla klienta problem wyświetlania czytelnej daty dostawy w e-mailach ShopMagic. Dowiesz się, dlaczego standardowe metody nie zadziałały i jak krok po kroku wdrożyć skuteczny workaround, aby Twój sklep działał tak, jak oczekujesz.
Opis sytuacji i wyzwania
Jeden z naszych klientów, zgłosił następujący problem:
„Mam w zamówieniu pole meta, które przechowuje datę w formacie timestamp. Cachcę, aby w e-mailach wysyłanych przez automatyzację ShopMagic ta data była w czytelnym formacie (np. 08.12.2025 14:00). Niestety, użycie {{ order.meta | key: ‘delivery_timestamp’ }} w treści e-maila zwraca tylko surowy timestamp.”
Dlaczego to problem?
- Timestamp to zapis czasu w sekundach od 1 stycznia 1970 roku — np. 1754661600.
- Jest idealny do obliczeń i przechowywania danych, ale kompletnie nieczytelny dla klienta końcowego.
- Wysyłanie go w tej formie w wiadomości e-mail wygląda nieprofesjonalnie i może wprowadzać w błąd.
Klient chciał, aby w automatyzacji timestamp był automatycznie zamieniany na ładną, czytelną datę.
Analiza przypadku w ShopMagic i próby rozwiązania
Na początku podeszliśmy do tematu standardowo — przez filtr w PHP, który przechwytuje wartość i konwertuje timestamp na format daty.
Pierwsze podejście – filtr shopmagic/core/placeholder/meta_value
add_filter( 'shopmagic/core/placeholder/meta_value', function ( $value, $meta_key ) {
if ( $meta_key === 'delivery_timestamp' && is_numeric( $value ) ) {
return date( 'd.m.Y H:i', intval( $value ) );
}
return $value;
}, 10, 2 );
Efekt: brak zmian. ShopMagic wciąż wyświetlał surowy timestamp.
Drugie podejście – filtr shopmagic/magic_tags/order.meta
add_filter( 'shopmagic/magic_tags/order.meta', function ( $value, $args ) {
if ( isset( $args['key'] ) && $args['key'] === 'delivery_timestamp' ) {
if ( is_numeric( $value ) ) {
return date( 'd.m.Y H:i', intval( $value ) );
}
}
return $value;
}, 10, 2 );
Efekt: ponownie brak rezultatu. Wartość wciąż trafiała do e-maila w oryginalnej formie.
Wnioski po testach
Po serii prób i testów okazało się, że wtyczka traktuje {{ order.meta | key: '...' }}
jako bezpośredni, nierozszerzalny odczyt z bazy danych.
Wartość ładowana jest wcześniej, zanim jakikolwiek hook PHP ma szansę ją zmodyfikować. Próby modyfikacji w hookach before_run
czy magic_tags_resolved
również nie działały.
W praktyce oznaczało to, że modyfikacja istniejącego pola meta w locie jest w ShopMagic niemożliwa.
Ostateczne rozwiązanie – obejście ograniczeń ShopMagic
Skoro nie mogliśmy zmienić wartości istniejącego pola przed wysyłką, zdecydowaliśmy się na prosty, ale skuteczny workaround:
- Pozostawiamy surowy timestamp w osobnym polu meta (np.
delivery_timestamp_raw
). - Dodajemy drugie pole meta (np.
delivery_date_pretty
) z już sformatowaną datą. - W treści e-maila ShopMagic odwołujemy się do tego drugiego pola.
Rozwiązanie
add_action( 'woocommerce_checkout_update_order_meta', function( $order_id ) {
$order = wc_get_order( $order_id );
// Surowy timestamp (przykład: 2 dni później, godz. 14:00)
$timestamp = strtotime( '+2 days 14:00' );
$order->update_meta_data( 'delivery_timestamp_raw', $timestamp );
// Ładna, sformatowana data
$formatted = date( 'd.m.Y H:i', $timestamp );
$order->update_meta_data( 'delivery_date_pretty', $formatted );
$order->save();
});
W treści e-maila ShopMagic:
Delivery date: {{ order.meta | key: 'delivery_date_pretty' }}
Efekt w skrzynce odbiorczej klienta:
Delivery date: 08.12.2025 14:00
Dlaczego to działa?
- ShopMagic odczytuje wartość pola meta bezpośrednio z bazy danych.
- Jeśli podamy mu już gotową, sformatowaną wartość, wyświetli ją bez dodatkowych konwersji.
- Zachowujemy również oryginalny timestamp, który wciąż może być używany do obliczeń w innych miejscach sklepu.
Praktyczne wskazówki (ShopMagic)
- Używaj dwóch pól meta — jedno do obliczeń (_raw), drugie do prezentacji (_pretty).
- Zawsze zapisuj daty w formacie zgodnym z WordPress timezone (wp_date()), aby uniknąć problemów ze strefami czasowymi.
- Testuj w środowisku staging przed wdrożeniem na produkcji, szczególnie w przypadku automatyzacji wysyłających e-maile do klientów.
- Dokumentacja ShopMagic: https://docs.shopmagic.app/
Podsumowanie i wnioski
Ten przypadek pokazał, że nawet jeśli wtyczka WooCommerce — w tym przypadku ShopMagic — nie daje natywnej możliwości modyfikacji danych przed wysyłką, można znaleźć proste obejście.
Kluczowe było zrozumienie, na jakim etapie ładowane są dane i przygotowanie ich w odpowiedniej formie jeszcze przed momentem wysyłki.
Korzyści z tego rozwiązania:
- Czytelne, profesjonalne wiadomości e-mail.
- Brak ingerencji w wewnętrzne mechanizmy ShopMagic.
- Zachowanie elastyczności i możliwości obliczeń na oryginalnych danych.
Jeśli chcesz, aby Twój WooCommerce działał dokładnie tak, jak potrzebujesz, a automatyzacje były w pełni dopasowane do Twojego biznesu — wypróbuj ShopMagic i skorzystaj z naszej pomocy technicznej, która pomoże wdrożyć nawet niestandardowe scenariusze.