LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Wtyczki i triki WordPress / Jak działa wtyczka Stats4U dla WordPressa: kod...
Ten artykuł w innych językach:

Jak działa wtyczka Stats4U dla WordPressa: kod licznika, umiejscowienie, zgoda i żądania

Jak działa wtyczka Stats4U dla WordPressa: kod licznika, umiejscowienie, zgoda i żądania

Management Summary

Stats4U to licznik odwiedzin i usługa statystyczna dla witryn. Rozszerzenie WordPressa ułatwia wybór wyglądu licznika, umieszczenie go na stronie i połączenie z narzędziem do zgód. Przeglądarka wysyła informacje o odwiedzinach do zewnętrznej usługi, która tworzy statystyki. Artykuł wyjaśnia ten podział zadań oraz granice integracji. Licznik bez własnych ciasteczek nadal przesyła dane, a usunięcie rozszerzenia nie kasuje automatycznie statystyk u dostawcy.

Spis treści
  1. Od kodu licznika do osadzenia
  2. Umiejscowienie w motywie
  3. Zgoda: wymagania i ograniczenia
  4. Dawny test sieciowy
  5. Języki i przejścia między stronami
  6. Publikacja i usuwanie wtyczki
  7. Wszystkie linki
  8. Pytania i odpowiedzi
  9. Źródła

Stats4U firmy LW IT Solutions wyświetla licznik odwiedzin jako mały obrazek. Przeglądarka wysyła żądania do stats4u.net; usługa zlicza i tworzy statystyki. Zależnie od integracji i ustawień mogą obejmować źródła wizyt, czas widoczności strony, głębokość przewinięcia i wskaźnik obecności online. Do osadzenia wystarcza numer licznika. Wtyczka WordPress jest dostępna w katalogu wtyczek; artykuł opisuje wersję 1.6.0. Kod znajduje się na GitHubie.

Artykuł wyjaśnia cztery zadania wtyczki: odczyt kodu licznika, umieszczenie obrazu w motywie, połączenie z narzędziem do zgód i załadowanie skryptu. Pierwotne testy przeprowadzono 2 października 2026 roku z WordPressem 7.1.2, PHP 8.4 i Twenty Twenty-Five. Zachowane raporty parsera, HTML i umiejscowienia porównano z kodem. Dawny test sieciowy celowo ograniczał ruch; nie potwierdza zachowania wszystkich odpowiedzi serwera ani każdego motywu.

Od kodu licznika do osadzenia

W „Ustawienia → Stats4U” kreator oferuje pięć kroków: licznik, wygląd, umiejscowienie, zgoda i zakończenie. Konfiguracja własna pokazuje zamiast tego wszystkie ustawienia na jednej stronie. Pierwsze pole przyjmuje istniejący kod licznika. Pozostałe możliwości otwierają generator lub zamawiają nowy numer. Żądania te wychodzą z przeglądarki osoby administrującej do usługi, a nie z kodu PHP wtyczki.

Parser stats4u_code_lesen() rozpoznaje kilka formatów kodu licznika obrazkowego. Zachowany test obejmuje dwanaście danych wejściowych; tabela łączy sam numer i numer z kratką w jednym wierszu. Skrypty globusa i mapy nie należą do obsługiwanych liczników obrazkowych. Przykłady nie dowodzą więc obsługi dowolnego kodu generatora:

WklejonoWynik
HTML, obrazek z linkiemnumer, wzór, tryb ciemny i rozmiar 150%
BBCodenumer, wzór, tryb ciemny
Markdownnumer, wzór, język niemiecki
kod skryptu z s4u.jsnumer, wzór, tryb ciemny, liczenie „unikalnych odwiedzających”, język polski
sam adres obrazkanumer i wzór
stara długa forma ?action=pic&s4uid=…numer i wzór
sam numer, także z #numer, wzór bez zmian
adres strony statystyk /live/<numer>numer
strona statystyk z własną nazwąwskazówka: wkleić kod albo numer
widżet globusa globe.jswskazówka: wtyczka pokazuje liczniki obrazkowe
dowolny inny tekstwskazówka: kod nierozpoznany

Od wersji 1.5.0 wtyczka wstawia oficjalny s4u.js zamiast samego obrazu. Skrypt odczytuje bieżący adres strony i document.referrer, a następnie przesyła te wartości z żądaniem obrazu. Ustawienia przeglądarki lub Referrer-Policy mogą usunąć albo skrócić adres odsyłający. Sam obraz również podlega tej polityce. Przy zwykłym ustawieniu domyślnym obcy serwer otrzymuje tylko początek adresu, na przykład https://example.com/; nie jest to jednak bezwarunkowa zasada ograniczenia do domeny. Poniższy fragment PHP wybiera skrypt ładowany od razu albo oczekujący element zastępczy:

PHP
// stats4u.php (excerpt)
function stats4u_zaehler_teile($e) {
    $daten = stats4u_skript_daten($e);
    if (stats4u_cmp($e) === null) {
        return array('skript' => array('src' => STATS4U_SKRIPT, 'async' => true) + $daten);
    }
    stats4u_wartet(true);
    return array('platzhalter' => $daten);
}

function stats4u_html() {
    $e = stats4u_einstellungen();
    if ($e['id'] === '') { return ''; }
    $t = stats4u_zaehler_teile($e);
    if (isset($t['skript'])) {
        return '<span class="stats4u-zaehler">' . trim(wp_get_script_tag($t['skript'])) . '</span>';
    }
    return '<span class="stats4u-zaehler" data-stats4u="' . esc_attr(wp_json_encode($t['platzhalter'])) . '"></span>';
}

Bez wybranego narzędzia do zgód wp_get_script_tag() tworzy skrypt gotowy do natychmiastowego ładowania, z wartościami atrybutów bezpiecznie zapisanymi w HTML. Przy rozpoznanej integracji najpierw powstaje pusty element zastępczy. data-stats4u zawiera ustawienia licznika w formacie danych JSON. Samo wygenerowanie takiego HTML nie potwierdza jeszcze skutecznej blokady w przeglądarce.

Umiejscowienie w motywie

Domyślna pozycja znajduje się pod stopką motywu. WordPress nie udostępnia uniwersalnego punktu bezpośrednio za widocznym obszarem stopki. wp_footer to miejsce wywoływane przez motyw, zwykle przy końcu strony. Dla pozycji „pod” i „w” wtyczka najpierw zbiera HTML w buforze wyjścia i szuka rozpoznawalnej stopki. Poniższy fragment rozpoznaje określone role, klasy i identyfikatory; dowolny układ nie musi do nich pasować:

PHP
// stats4u.php (excerpt)
function stats4u_ist_seitenfuss($name, $tag) {
    if (preg_match('/(?<![\w-])role\s*=\s*["\']?contentinfo\b/i', $tag)) { return true; }
    if (preg_match('/(?<![\w-])itemtype\s*=\s*["\']?[^"\'>]*WPFooter/i', $tag)) { return true; }
    $namen = array('colophon', 'footer', 'site-footer', 'main-footer', 'page-footer', 'global-footer',
                   'elementor-location-footer');
    if ($name === 'footer') { $namen[] = 'wp-block-template-part'; }
    foreach (array('id', 'class') as $attr) {
        if (preg_match('/(?<![\w-])' . $attr . '\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^\s>]+))/i', $tag, $m)) {
            $wert = strtolower(($m[1] ?? '') . ($m[2] ?? '') . ($m[3] ?? ''));
            if (array_intersect(preg_split('/\s+/', trim($wert)), $namen)) { return true; }
        }
    }
    return false;
}

Spośród rozpoznanych obszarów wybrany zostaje ostatni najbardziej zewnętrzny. Gdy na przykład div.site-footer zawiera kolejny obszar stopki, uwzględniany jest cały zewnętrzny fragment. Zastępczo może posłużyć zwykły <footer> po wywołaniu get_footer(). Brak oznaczeń lub inne bufory wyjścia mogą przenieść licznik do ogólnej pozycji na końcu strony. Wersja 1.6.0 wstawia licznik przez funkcję zwrotną bufora. CSS z :has(img) ukrywa obsługiwane kontenery bez elementu obrazu; nie sprawdza, czy plik obrazu został poprawnie pobrany.

Zachowany raport potwierdza pozycje w testowanym motywie. „Pod treścią” działa raz w głównej treści pojedynczego wpisu lub strony. Statyczna strona główna również może spełnić ten warunek; dawna testowa strona główna bloga nie otrzymała tam licznika. Pozostałe opcje obejmują stały dolny narożnik i „nigdzie automatycznie”. Własne miejsce zapewniają blok „Stats4U counter” i shortcode . do_shortcode('') zwraca HTML, który szablon musi jeszcze wyświetlić. Dwa osadzenia mogą wysłać dwa żądania obrazu; nie gwarantują automatycznie jednego zliczenia.

Zgoda: wymagania i ograniczenia

Wersja 1.6.0 zawiera 27 pozycji: 25 narzędzi, dodatkowy starszy tryb CookieYes i WP Consent API. Dla każdego wyboru wtyczka generuje atrybuty blokujące lub sprawdzenie API. Oczekiwanie na zgodę wymaga prawidłowego narzędzia, kategorii lub identyfikatora usługi oraz kolejności wykonania. Tabela pokazuje zachowany wynik HTML; nie zastępuje pełnych testów akceptacji i odmowy dla każdej integracji.

NarzędzieSkrypt zwalniający w HTML
Complianz<script type="text/plain" data-category="statistics">
Cookiebot<script type="text/plain" data-cookieconsent="statistics">
consented.eu<script type="text/plain" data-consented="stats4u">
CookieYes<script data-cookieyes="cookieyes-analytics" src="…/freigabe.js">
WP Consent APIskrypt inline, który pyta wp_has_consent() i nasłuchuje zmian

W zapisanych przypadkach HTML początkowo nie zawierał bezpośrednio ładowanego znacznika s4u.js. Niektóre integracje używają osobnego pliku freigabe.js. Dla WP Consent API kod wymaga ustawionego typu zgody i pozytywnego wyniku wp_has_consent(). W trybie opt-out wynik może być pozytywny jeszcze przed wyraźną zgodą. Konfiguracja API musi więc odpowiadać oczekiwanemu działaniu. Własne integracje dopuszczają tylko nazwy atrybutów type, class i data-*:

PHP
// stats4u.php (excerpt)
function stats4u_eigene_attribute($roh) {
    $aus = array('type' => 'text/plain');
    if (preg_match_all('/([a-zA-Z][a-zA-Z0-9_.:-]*)\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^\s"\'>]+))/', (string) $roh, $m, PREG_SET_ORDER)) {
        foreach ($m as $a) {
            $name = strtolower($a[1]);
            if (!preg_match('/^(data-[a-z0-9_.:-]+|class|type)$/', $name)) { continue; }
            $wert = $a[2] !== '' ? $a[2] : ((isset($a[3]) && $a[3] !== '') ? $a[3] : ($a[4] ?? ''));
            $aus[$name] = substr(preg_replace('/[^A-Za-z0-9 _.:\/,#-]/', '', $wert), 0, 80);
        }
    }
    return $aus;
}

Test z onload="alert(1)" potwierdza usunięcie tego kodu obsługi zdarzenia. Dozwolone nazwy atrybutów nie chronią jednak przed każdą błędną konfiguracją: type="text/javascript" jest akceptowane i może uruchomić skrypt zwalniający natychmiast. Wersja 1.6.0 nie zatrzymuje też samodzielnie działających skryptów po wycofaniu zgody. Udostępniona już funkcja window.stats4uAn() nie sprawdza zgody przed kolejnymi wywołaniami. Odmowa, wycofanie zgody i późniejsze przejścia między stronami wymagają więc testu konkretnej integracji.

WordPress generuje kod osadzenia. Przeglądarka wysyła żądania, a serwer Stats4U zlicza. Oczekiwanie na zgodę wymaga prawidłowo skonfigurowanej integracji.
WordPress generuje kod osadzenia. Przeglądarka wysyła żądania; serwer Stats4U zlicza. Blokowanie do czasu zgody zależy od prawidłowej integracji.

Dawny test sieciowy

Dawny raport opisuje Chrome ze świeżym profilem i przechwytywaniem żądań. Z usługi mógł zostać pobrany tylko s4u.js; pozostałe żądania zapisywano i przerywano. Pokazywało to próby wysłania danych, a nie odpowiedzi serwera ani rzeczywiste wyniki licznika. Test trwający 70 sekund nie obejmuje wszystkich możliwych żądań. Tabela przedstawia tę historyczną próbę; rozmiar pliku, kompresja i czas przechowywania w pamięci podręcznej mogą później ulec zmianie.

MomentŻądanieTreść
przy ładowanius4u.js13 237 bajtów przesłanych, Brotli, godzina w pamięci podręcznej, bez Set-Cookie
przy ładowaniuaction=cfg, GETtylko numer licznika: ustawienia licznika
przy ładowaniuaction=pic, obrazeknumer licznika, wzór, tryb ciemny, język, adres strony, adres odsyłający i liczba losowa przeciw pamięci podręcznej; żądanie przeznaczone do zliczania; przerwane w opisanym teście
po 60 saction=ping, POSTtylko numer licznika, dla „teraz online”
przy opuszczaniuaction=puls, beaconnumer licznika, adres strony, widoczne sekundy, głębokość przewinięcia i czas ładowania

Obecny skrypt osadzenia nie ustawia własnych ciasteczek ani wpisów w localStorage. Dawny test z blokadą żądań sam w sobie nie potwierdzałby jednak zachowania wszystkich punktów usługi. Żądanie obrazu zawiera pełny bieżący URL i dostępny adres odsyłający; adresy stron nie powinny więc zawierać poufnych wartości. action=puls może zostać wysłane już przy pierwszym przejściu karty w tło, a nie dopiero przy ostatecznym opuszczeniu strony. Opcjonalne funkcje mogą dodać wymiary ekranu i okna, zdarzenia oraz dane wydajności. action=ping jest podejmowane co minutę przy widocznej stronie, dla najwyżej dziesięciu liczników i maksymalnie 120 wysłań. Pozytywny wynik sendBeacon() potwierdza tylko przyjęcie danych do kolejki wysyłania. Statystyki powstają na serwerze Stats4U. Kod PHP tej wtyczki nie zawiera własnego połączenia HTTP z usługą; nie jest to sprawdzenie pozostałych części instalacji WordPress.

Języki i przejścia między stronami

Przy ustawieniu „język każdej strony” wtyczka korzysta z ustawień regionalnych zgłoszonych przez WordPress. Zachowany test Polylang pokazuje en, de i pl dla odpowiednich stron. Przejście bez pełnego przeładowania wymaga dodatkowych kroków: s4u:seiteweg kończy poprzedni pomiar czasu, po czym trzeba ponownie osadzić licznik dla nowej strony. W tej witrynie inc/footer-tracker.php osobno sprawdza Consented.hasConsent('stats4u') przed ponownym wstawieniem skryptów lub aktywacją elementów zastępczych. Ta dodatkowa kontrola należy do witryny, a nie do publicznej funkcji wtyczki stats4uAn(). Odczyt kodu nie stanowi testu wszystkich przypadków wycofania zgody.

Publikacja i usuwanie wtyczki

Raport rozwojowy podaje uwagi WordPress.org z 26 września i zatwierdzenie z 29 września 2026 roku. Opublikowana lista zmian potwierdza poprawki bezpiecznego zapisu wartości w HTML i funkcji zwrotnej bufora w wersji 1.6.0. Chodzi o przygotowanie każdej wartości do konkretnego miejsca w HTML. Przegląd nie gwarantuje braku błędów. Dawniej dołączone tłumaczenia przeniesiono poza tę paczkę. Pakiety z translate.wordpress.org są dostępne dopiero po publikacji poszczególnych tłumaczeń; 18 dawnych wzorów nie oznacza automatycznie 18 gotowych pakietów.

Procedura usuwania kasuje stats4u_einstellungen i zapisany widok ustawień stats4u_ansicht. W Multisite przechodzi przez opcje poszczególnych witryn. Uruchamia się przy usuwaniu wtyczki, a nie samym wyłączeniu. Pamięć podręczna strony może nadal zawierać dawny HTML licznika. Usunięcie wtyczki nie usuwa zewnętrznego licznika ani statystyk.

Wszystkie linki

Pytania i odpowiedzi

Czy Stats4U ustawia ciasteczko?

Sprawdzony s4u.js nie ustawia ciasteczek ani nie zapisuje danych w localStorage dla samego osadzenia. Nie oznacza to, że cała witryna lub każde narzędzie do zgód działa bez ciasteczek. Niektóre adaptery wtyczki odczytują istniejące ciasteczka zgody. Generator i logowanie na stats4u.net również są czymś innym niż osadzony licznik. Dawny test blokował większość odpowiedzi serwera, więc nie był pełnym testem ciasteczek. Żądania nadal przesyłają między innymi adres IP i identyfikację przeglądarki. Podlinkowany wzór polityki prywatności musi odpowiadać rzeczywistym ustawieniom.

Co się dzieje, gdy stats4u.net jest niedostępne?

Awaria może uniemożliwić wyświetlenie obrazka licznika albo działanie części statystyk. async pozwala przeglądarce czytać HTML podczas pobierania skryptu, lecz pobieranie i wykonanie nadal wymagają czasu oraz zasobów. Reguła CSS ukrywa pusty kontener tylko bez elementu img. Jeśli element obrazu już istnieje, ale pobranie pliku się nie powiedzie, może pozostać widoczny uszkodzony obraz. Całkowicie niezmieniony wygląd strony nie jest więc gwarantowany.

Czy wizyty w podglądzie albo w edytorze są liczone?

Strona ustawień i edytor bloków używają rl=1 dla podglądu obrazka. W sprawdzonym kodzie usługi parametr ten wyłącza zwiększanie licznika. Samo żądanie obrazu nadal dociera na serwer ze zwykłymi danymi połączenia. Dotyczy to tych dwóch wbudowanych podglądów; zwykły podgląd wpisu w witrynie nie staje się automatycznie takim samym trybem.

Czy usunięcie wtyczki usuwa też licznik?

Usunięcie wtyczki kasuje własne ustawienia WordPress i preferencje widoku. Nie wysyła żądania usunięcia zewnętrznego licznika. Stara pamięć podręczna i osobno wstawiony kod wymagają osobnego uwzględnienia. Zarządzanie statystykami lub usunięcie danych na stats4u.net to odrębna czynność.

Źródła

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innymi wtyczkami lub środowiskami hostingowymi oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.