Grafika główna wpisu netgold: Darmowe powiadomienia o zamówieniach WooCommerce na telefon. Przedstawia smartfon wyświetlający powiadomienie o nowym zamówieniu w aplikacji Discord, logotypy WooCommerce i Discorda połączone strzałką oraz duży napis "100% FREE".

Darmowe powiadomienia o zamówieniach WooCommerce na telefon

Szukasz sposobu na darmowe powiadomienia o zamówieniach ze sklepu WooCommerce bezpośrednio na telefon? Najlepszym, bezpłatnym i natychmiastowym rozwiązaniem jest integracja sklepu z komunikatorem Discord za pomocą Webhooka oraz lekkiego kodu PHP dodanego do strony. Metoda ta omija płatne bramki SMS i jest w 100% zgodna z RODO – na telefon przesyłane są wyłącznie operacyjne szczegóły zamówienia (lista produktów, kwota, metoda wysyłki), bez danych osobowych klienta.

Wstęp: E-commerce to wyścig z czasem

Jeśli prowadzisz sklep na WooCommerce, doskonale znasz to uczucie: odświeżasz skrzynkę mailową co kilkanaście minut, żeby sprawdzić, czy wpadło nowe zamówienie. A kiedy już wpadnie, mail często gubi się w gąszczu innych wiadomości.

W e-commerce liczy się czas reakcji. Im szybciej wiesz o zamówieniu, tym szybciej paczka trafia do klienta. Logiczne, prawda?

Większość właścicieli sklepów szuka więc sposobu na powiadomienia na telefon. I tu zaczynają się schody, bo rynek podsuwa głównie rozwiązania płatne.

Płatne bramki SMS – jak to się robi zazwyczaj (i ile to kosztuje)?

Jeśli zrobisz szybki research, trafisz na wtyczki i bramki SMS. Najpopularniejsze opcje to:

Jako osoba, która na co dzień zajmuje się sklepami na Woocommerce, od jakiegoś czasu szukałem rozwiązania idealnego. Takiego, które będzie w 100% darmowe, natychmiastowe i – co bardzo ważne – zgodne z RODO.

I znalazłem. Pokażę Ci, jak zamienić popularną darmową aplikację Discord w profesjonalny „pager” dla Twojego magazynu.

Dlaczego Discord to idealny darmowy pager dla Twojego sklepu?

Zamiast bawić się w bramki SMS, wykorzystamy tzw. Webhooki. To bezpośrednie, błyskawiczne połączenie między Twoim sklepem a aplikacją Discord (którą możesz zainstalować na iOS, Android czy komputer).

Co najważniejsze: mój skrypt wyciąga ze sklepu tylko dane operacyjne (nazwy produktów, kwotę, rodzaj wysyłki). Nie wysyła na zewnątrz żadnych imion, nazwisk czy adresów klientów, więc śpisz spokojnie, nie martwiąc się o RODO.

Zrobimy to w dwóch prostych krokach.

Krok 1: Wygenerowanie linku w Discordzie

Pobierz darmową aplikację Discord na komputer i telefon (Android, iOS) i załóż konto.
Możesz to także zrobić przez przeglądarkę.

Strona główna komunikatora Discord z opcją pobrania aplikacji na komputer i telefon.

Kliknij ikonę „+” po lewej stronie i wybierz „Stwórz swój własny” (nazwij go np. „Sklep – Powiadomienia”).

Interfejs Discorda: Przycisk z ikoną plusa do tworzenia nowego serwera powiadomień.

Najedź na kanał tekstowy (np. #ogólny), kliknij ikonę Zębatki (Edytuj kanał).

Ustawienia kanału tekstowego w Discordzie z widoczną zakładką Integracje.

Przejdź do zakładki Integracje -> Webhooki i kliknij Nowy Webhook. Nazwij go np. „Zamówienia”

Tworzenie nowego webhooka w panelu integracji na serwerze Discord.

Kliknij „Skopiuj adres URL webhooka”

Przycisk do kopiowania adresu URL webhooka potrzebnego do integracji z WooCommerce.

Krok 2: Wklejenie kodu w WooCommerce

Teraz zamiast instalować ciężkie wtyczki do powiadomień, użyjemy czystego, lekkiego kodu PHP.

W panelu WordPressa zainstaluj darmową wtyczkę WPCode Lite (jest to najbezpieczniejszy sposób na dodawanie własnych funkcji).

Wtyczka WPCode Lite w repozytorium WordPressa do bezpiecznego dodawania kodu PHP.

Przejdź do Fragmenty kodu -> Dodaj -> Dodaj własny kod (nowy fragment) -> Fragment kodu PHP.

Możesz go nazwać np. „Webhook Discord”

Panel wtyczki WPCode podczas wklejania autorskiego kodu PHP dla powiadomień o zamówieniach.

Wklej poniższy kod:

add_action( 'woocommerce_order_status_changed', 'woo_discord_status_trigger', 10, 4 );

function woo_discord_status_trigger( $order_id, $from_status, $to_status, $order ) {
    if ( ! in_array( $to_status, ['processing', 'on-hold'] ) ) {
        return;
    }

    if ( $order->get_meta( '_discord_sent' ) === 'yes' ) {
        return;
    }

    $webhook_url = 'TUTAJ WKLEJ SWÓJ DISCORD WEBHOOK URL'; 

    $order_date = $order->get_date_created() ? $order->get_date_created()->format('d.m.Y H:i:s') : date('d.m.Y H:i:s');
    $currency = $order->get_currency();
    
    $formatted_total = strip_tags( html_entity_decode( wc_price( $order->get_total(), array( 'currency' => $currency ) ) ) );
    
    $payment_method = $order->get_payment_method_title() ?: 'Brak danych';
    
    $shipping_name = $order->get_shipping_method();
    if ( $shipping_name ) {
        $shipping_cost = (float) $order->get_shipping_total() + (float) $order->get_shipping_tax();
        
        if ( $shipping_cost > 0 ) {
            $formatted_shipping_cost = strip_tags( html_entity_decode( wc_price( $shipping_cost, array( 'currency' => $currency ) ) ) );
            $shipping_method = "{$shipping_name} - {$formatted_shipping_cost}";
        } else {
            $shipping_method = "{$shipping_name} (Darmowa)";
        }
    } else {
        $shipping_method = 'Nie dotyczy';
    }

    $items_list = "";
    foreach ( $order->get_items() as $item_id => $item ) {
        $product = $item->get_product();
        $product_name = $product ? $product->get_title() : $item->get_name();
        $quantity = $item->get_quantity();
        
        $gross_line_total = (float) $item->get_total() + (float) $item->get_total_tax();
        $line_total = wc_price( $gross_line_total, array( 'currency' => $currency ) );
        $line_total = strip_tags( html_entity_decode( $line_total ) );

        $meta_data = $item->get_formatted_meta_data( '_', true );
        $variations_text = "";
        
        if ( ! empty( $meta_data ) ) {
            $meta_array = array();
            foreach ( $meta_data as $meta ) {
                $key = wp_strip_all_tags( $meta->display_key );
                $val = wp_strip_all_tags( $meta->display_value );
                $meta_array[] = "{$key}: {$val}";
            }
            $variations_text = "\n   ↳ *" . implode( ' | ', $meta_array ) . "*";
        }

        $items_list .= "**{$quantity} szt.** - {$product_name} - {$line_total}{$variations_text}\n";
    }

    if ( empty( $items_list ) ) {
        $items_list = "Brak produktów (błąd wczytywania).";
    }

    $payload = [
        'username' => 'Sklep',
        'avatar_url' => 'https://cdn-icons-png.flaticon.com/512/2821/2821898.png',
        'embeds' => [
            [
                'title' => "📦 Nowe Zamówienie #{$order_id}",
                'type' => 'rich',
                'color' => hexdec( "FEE75C" ), 
                'fields' => [
                    [
                        'name' => '📅 Data i Godzina',
                        'value' => $order_date,
                        'inline' => false
                    ],
                    [
                        'name' => '🛒 Kupione Produkty',
                        'value' => $items_list, 
                        'inline' => false
                    ],
                    [
                        'name' => '💰 Kwota Łączna',
                        'value' => "**{$formatted_total}**", 
                        'inline' => true
                    ],
                    [
                        'name' => '💳 Płatność',
                        'value' => $payment_method,
                        'inline' => true
                    ],
                    [
                        'name' => '🚚 Wysyłka',
                        'value' => $shipping_method,
                        'inline' => true
                    ]
                ],
                'footer' => [
                    'text' => 'Automatyczne powiadomienie ze sklepu',
                ],
                'timestamp' => date( 'c' )
            ]
        ]
    ];

    $response = wp_remote_post( $webhook_url, [
        'body'    => json_encode( $payload ),
        'headers' => [ 'Content-Type' => 'application/json' ],
        'blocking' => false,
    ]);

    if ( ! is_wp_error( $response ) ) {
        $order->update_meta_data( '_discord_sent', 'yes' );
        $order->save_meta_data(); 
    }
}

Ważne: W linijce $webhook_url wklej adres, który skopiowałeś z Discorda!

Po wklejeniu kodu ustaw przełącznik w prawym górnym rogu na Włączono i kliknij „Zapisz fragment kodu”.

Podsumowanie

I to wszystko!

Złóż teraz testowe zamówienie w swoim sklepie (np. za pobraniem). Zobaczysz, jak w ułamku sekundy na Twoim ekranie pojawia się eleganckie powiadomienie z danymi zamówienia.

discord message store

FAQ – Najczęściej zadawane pytania

  • Czy powiadomienia o zamówieniach na Discord są całkowicie darmowe?

    Tak, rozwiązanie to jest w 100% darmowe dożywotnio. Aplikacja Discord nie pobiera żadnych opłat za zakładanie serwerów ani generowanie Webhooków, niezależnie od ilości otrzymywanych powiadomień.

  • Czy ten kod PHP spowolni mój sklep WooCommerce?

    Nie. Kod wykorzystuje funkcję wp_remote_post z parametrem blocking => false. Oznacza to, że żądanie wysyłane jest asynchronicznie w tle. Proces zakupowy klienta nie jest wstrzymywany ani spowalniany w oczekiwaniu na odpowiedź serwerów Discorda.

  • Czy przesyłanie danych na Discord jest zgodne z RODO?

    Tak, o ile korzystasz z przygotowanego przeze mnie skryptu. Kod celowo wyciąga ze sklepu wyłącznie dane operacyjne (lista produktów do spakowania, łączna kwota, metoda wysyłki). Nie są pobierane ani wysyłane żadne dane osobowe (imiona, nazwiska, maile, adresy dostawy), co czyni to rozwiązanie w pełni bezpiecznym.

  • Gdzie najlepiej wkleić kod PHP w WordPressie?

    Zalecam korzystanie z darmowej wtyczki WPCode. Wklejanie kodu bezpośrednio do pliku functions.php motywu może spowodować jego utratę po aktualizacji szablonu, a najdrobniejszy błąd składni (np. brakujący średnik) może doprowadzić do tzw. białego ekranu śmierci (WSOD). WPCode automatycznie wyłapuje błędy i zapobiega awariom strony.

  • Czy ten skrypt obsługuje produkty z wariantami (np. kolor, rozmiar)?

    Tak. Skrypt posiada wbudowaną obsługę atrybutów WooCommerce. Jeśli klient kupi produkt z wariantem, informacja ta (np. Rozmiar: XL, Kolor: Czarny) zostanie elegancko wylistowana w powiadomieniu pod nazwą głównego produktu.