Historia cen: - Tabela wp_price_history z WP Cronem dziennym (snapshot cen) - AJAX endpoint apartamenty_get_price_history (zabezpieczony nonce) - Popup "Historia cen" w widgecie — vanilla JS, modal zgodny z projektem Jawnosc cen: - Endpointy /ceny-mieszkan.xml + /dane-gov-pl.xml (XSD-compliant) - Pliki MD5 dla obu XML - Strona admina: Narzedzia -> Jawnosc Cen z URL-ami do Ministerstwa - Transient cache 1h z inwalidacja przez cron Dokumentacja: docs/readme.md + docs/jawnosc-cen.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.4 KiB
Jawność cen — dokumentacja
Co zostało zbudowane
Cztery publiczne endpointy HTTP oraz strona administracyjna, spełniające wymóg ustawy o jawności cen nieruchomości.
Endpointy
| URL | Opis |
|---|---|
/ceny-mieszkan.xml |
XML z cenami wszystkich lokali + historia zmian z bazy danych |
/ceny-mieszkan.md5 |
Hash MD5 powyższego pliku XML (32-znakowy lowercase hex) |
/dane-gov-pl.xml |
Katalog zgodny z XSD portalu dane.gov.pl, wskazujący na plik cen |
/dane-gov-pl.md5 |
Hash MD5 katalogu |
Wszystkie endpointy są publicznie dostępne bez logowania.
Strona administracyjna
wp-admin → Narzędzia → Jawność Cen
Pokazuje oba URL-e do zgłoszenia do Ministerstwa z przyciskami „Kopiuj URL" i „Otwórz XML".
Jak to działa
Plik cen (/ceny-mieszkan.xml)
- Pobiera wszystkie opublikowane posty typu
apartamenty - Dla każdego lokalu odczytuje pola ACF:
information_type,information_floor,information_floor_space,information_price,information_price_m2,information_status - Dołącza historię cen z tabeli
wp_price_history(ta sama tabela co cron dzienny) - Wynik cachowany w transiencie WordPress na 1 godzinę
- Cache jest automatycznie czyszczony przy każdym uruchomieniu crona dziennego
Struktura XML:
<?xml version="1.0" encoding="UTF-8"?>
<lokale inwestycja="Wyszyńskiego 12" generowany="2026-03-12T10:00:00+01:00">
<lokal id="123">
<nazwa>A1 – Lokal 101</nazwa>
<typ>mieszkanie</typ>
<pietro>1</pietro>
<powierzchnia>35,68</powierzchnia>
<status>dostępny</status>
<cena_brutto>677 920</cena_brutto>
<cena_za_m2>19 000</cena_za_m2>
<data_aktualizacji>2026-03-12</data_aktualizacji>
<historia_cen>
<zmiana data="2026-03-12">
<cena_brutto>677 920</cena_brutto>
<cena_za_m2>19 000</cena_za_m2>
</zmiana>
</historia_cen>
</lokal>
</lokale>
Katalog dane.gov.pl (/dane-gov-pl.xml)
Statyczny XML generowany dynamicznie — URL zasobu pobierany przez home_url(), data przez date(). Zgodny z XSD otwarte_dane_latest.xsd portalu dane.gov.pl.
Kod źródłowy
Plik: wp-content/plugins/elementor-addon/elementor-addon.php
| Funkcja | Opis |
|---|---|
apartamenty_xml_rewrite_rules() |
Rejestruje reguły URL dla endpointów |
apartamenty_xml_query_vars() |
Dodaje query vars do WordPress |
apartamenty_generate_price_xml() |
Generuje XML cen z cachowaniem |
apartamenty_generate_datagov_xml() |
Generuje XML katalogu dane.gov.pl |
apartamenty_xml_template_redirect() |
Obsługuje żądania HTTP i wysyła odpowiedź |
apartamenty_jawnosc_cen_menu() |
Rejestruje stronę w menu Narzędzia |
apartamenty_jawnosc_cen_page() |
Renderuje stronę administracyjną |
Co musi zrobić Klient
Krok 1: Flush rewrite rules (jednorazowo po wdrożeniu)
Po każdym wdrożeniu zmian w pluginie należy odświeżyć reguły permalink:
wp-admin → Ustawienia → Bezpośrednie odnośniki → kliknij „Zapisz zmiany"
Bez tego kroku endpointy XML zwracają błąd 404.
Krok 2: Zgłoszenie do portalu dane.gov.pl
- Zaloguj się na dane.gov.pl (konto instytucjonalne dewelopera lub pełnomocnika)
- W panelu wydawcy wybierz „Dodaj zbiór danych" lub „Zasilanie automatyczne (harvester)"
- Podaj URL katalogu:
https://wyszynskiego12.pagedev.pl/dane-gov-pl.xml - Portal będzie automatycznie pobierał ten plik (codziennie) i aktualizował dane w rejestrze
Jeśli portal dane.gov.pl wymaga wcześniejszej rejestracji instytucji — należy ją przeprowadzić osobno. Kontakt: kontakt@dane.gov.pl
Krok 3 (opcjonalnie): Weryfikacja endpointów przed zgłoszeniem
Przed podaniem URL-a do Ministerstwa warto sprawdzić każdy endpoint ręcznie:
| URL | Oczekiwany wynik |
|---|---|
/ceny-mieszkan.xml |
XML z listą lokali, Content-Type: application/xml |
/ceny-mieszkan.md5 |
32-znakowy ciąg liter i cyfr, np. a3f2b1c9... |
/dane-gov-pl.xml |
XML z elementem <datasets>, URL w <resource> wskazuje na /ceny-mieszkan.xml |
/dane-gov-pl.md5 |
32-znakowy ciąg liter i cyfr |
Aktualizacja danych
Dane w pliku XML są aktualizowane automatycznie:
- Ceny pobierane są z pól ACF w WordPress — wystarczy zaktualizować pole
information_pricew edytorze posta, a nowa cena pojawi się w XML po max. 1 godzinie (czas życia cache) - Historia cen zapisywana jest codziennie przez WP Cron (szczegóły w
docs/readme.md) - Cache XML czyszczony jest przy każdym uruchomieniu crona
Ręczne wymuszenie odświeżenia XML (np. po pilnej zmianie ceny):
Przez WP-CLI (SSH):
wp transient delete apartamenty_price_xml_cache
Lub przez phpMyAdmin / SQL:
DELETE FROM wp_options WHERE option_name = '_transient_apartamenty_price_xml_cache';
DELETE FROM wp_options WHERE option_name = '_transient_timeout_apartamenty_price_xml_cache';
Uwagi techniczne
- Endpointy nie wymagają żadnej konfiguracji po stronie serwera (nginx/Apache) — działają przez mechanizm rewrite rules WordPress
- XML generowany jest jako czysty string PHP z
htmlspecialchars(ENT_XML1)— bezpieczny dla znaków specjalnych w nazwach lokali - Katalog dane.gov.pl zawiera hardcodowane dane inwestycji (Wyszyńskiego 12) — jeśli dane inwestycji się zmienią, należy zaktualizować funkcję
apartamenty_generate_datagov_xml()w pluginie