Files
Jacek Pyziak 972c69b136 feat(v0.1): historia cen + jawnosc cen — milestone Initial Release
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>
2026-03-12 15:40:29 +01:00
..

Historia cen — dokumentacja

Cron dzienny: zapisywanie historii cen

Co robi

Raz na dobę WP Cron uruchamia zadanie apartamenty_record_prices, które:

  1. Pobiera wszystkie opublikowane posty typu apartamenty
  2. 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")
  3. Zapisuje jeden rekord dziennie do tabeli wp_price_history
  4. 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 (wp action), 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 Cron
  • elementor_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;