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>
Historia cen — dokumentacja
Cron dzienny: zapisywanie historii cen
Co robi
Raz na dobę WP Cron uruchamia zadanie apartamenty_record_prices, które:
- Pobiera wszystkie opublikowane posty typu
apartamenty - Odczytuje aktualne ceny z pól ACF:
information_price— cena brutto (np."677 920")information_price_m2— cena za m² (np."19 000")information_floor_space— metraż (np."35,68")
- Zapisuje jeden rekord dziennie do tabeli
wp_price_history - Używa
INSERT IGNORE— jeśli rekord dla danego apartamentu i daty już istnieje, pomija (bez duplikatów)
Tabela bazy danych
Nazwa: wp_price_history
| Kolumna | Typ | Opis |
|---|---|---|
id |
BIGINT UNSIGNED AUTO_INCREMENT | Klucz główny |
post_id |
BIGINT UNSIGNED | ID posta apartamentu |
price |
VARCHAR(50) | Cena brutto jako string, np. "677 920" |
price_m2 |
VARCHAR(50) | Cena za m² jako string, np. "19 000" |
floor_space |
VARCHAR(50) | Metraż jako string, np. "35,68" |
recorded_at |
DATE | Data zapisu, np. "2026-03-12" |
Unikalny klucz: (post_id, recorded_at) — jeden wpis na apartament na dzień.
Harmonogram
- Częstotliwość: raz dziennie (
daily) - Hook WP Cron:
apartamenty_record_prices - Rejestracja: przy każdym żądaniu strony (
wpaction), jeśli zadanie nie jest jeszcze zaplanowane
Kod źródłowy
Plik: wp-content/plugins/elementor-addon/elementor-addon.php
elementor_addon_schedule_cron()— rejestruje zadanie w WP Cronelementor_addon_record_prices()— wykonuje zapis cen
Ważne: WP Cron wymaga ruchu na stronie
WP Cron nie jest prawdziwym cronem systemowym — uruchamia się przy odwiedzeniu strony przez użytkownika. Jeśli strona ma mały ruch, zadanie może się nie wykonać o dokładnej porze.
Rozwiązanie: prawdziwy cron systemowy (zalecane na produkcji)
Wyłącz WP Cron w wp-config.php:
define( 'DISABLE_WP_CRON', true );
Dodaj zadanie w cPanel → Cron Jobs (lub przez SSH):
0 6 * * * wget -q -O /dev/null "https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
lub z curl:
0 6 * * * curl -s "https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
Powyższe uruchamia cron codziennie o 6:00.
Ręczne uruchomienie (debugowanie)
Aby wymusić zapis raz ręcznie bez czekania na cron, wklej w przeglądarce (zalogowany jako admin):
https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron
Lub przez WP-CLI (SSH):
wp cron event run apartamenty_record_prices
Sprawdzenie następnego uruchomienia (WP-CLI)
wp cron event list
Weryfikacja zapisanych danych (SQL)
SELECT * FROM wp_price_history ORDER BY recorded_at DESC LIMIT 20;
Liczba rekordów per apartament:
SELECT post_id, COUNT(*) as wpisy, MIN(recorded_at) as od, MAX(recorded_at) as do
FROM wp_price_history
GROUP BY post_id;