Nie mogę ustawić roku poniżej 1899 na stanowisko. Jeśli ustawię rok poniżej 1899, zostanie on automatycznie ustawiony na bieżący rok.
Kupiłem motyw Osi czasu i zapytałem na forum wsparcia. Odpowiedzieli:
To brzmi jak ograniczenie utworzone przez twojego dostawcę usług hostingowych. Nic w temacie nie stoi na przeszkodzie, aby przypisać datę - jak widać, demo zawiera posty z datami z 1400 roku. Spróbuj skontaktować się z dostawcą usług hostingowych i sprawdź, czy mają jakiś wgląd w to, jak to rozwiązać.
date
date-time
post-editor
Spartanie
źródło
źródło
WP_DEBUG
i edytuj komunikat błędu w swoim pytaniu. Mogłem tak wyglądać, ale link do działającej wersji omawianego motywu też nie jest zbyt pomocny.Odpowiedzi:
To nie jest tak naprawdę odpowiedź, tylko próba znalezienia konkretnego kontekstu dla tego problemu. Zainstaluj następującą wtyczkę na swojej stronie, spróbuj ustawić trzy daty i dodaj wynik do drugiej
<pre>
w poniższej tabeli.Gist of Plugin można sprawdzić tutaj .
0999
, kliknij Aktualizuj . Czy jest zapisany lub zmieniony na bieżącą datę?1899
,2020
a2039
.źródło
Pytanie i oczekiwania
Chociaż dosłowna forma tego pytania jest praktyczna w kontekście (rok 1899), jest nieco niejasna w sensie teoretycznym. Ile lat ma lat? Jak daleko w przeszłość chcielibyśmy się posunąć? Co z przyszłością?
Ponieważ WordPress zaczął jako silnik do blogowania, w tym kontekście kontekstowym ewoluował, aby obsługiwać następujący przedział czasu:
Gdy korzystanie z WordPress przekształciło się w aplikacje nie blogujące, takie projekty (zwykle historia i sztuka, jak widziałem w raportach) zaczęły napotykać różne problemy z datami spoza tego zakresu.
Na potrzeby moich badań sformułowałem następujące pytania:
Ograniczenia platformy
Ponieważ WordPress jest aplikacją PHP i korzysta z MySQL do przechowywania danych, podlega ich ograniczeniom.
MySQL
WordPress przechowuje daty postów w
post_date
kolumnieDATETIME
typu w MySQL.Zgodnie z dokumentacją ten typ obsługuje lata od 1000 do 9999 :
Jednak mówi również, że wcześniejsze wartości mogą działać, nie wspominając o późniejszych wartościach:
Chociaż empirycznie zaobserwowałem wartości poza zakresem działania, jest to anegdota i wypada z naszego stanu niezawodności.
PHP
W programowaniu PHP powszechnie stosowana jest uniksowa reprezentacja datownika. Zgodnie z dokumentacją do naszych celów (PHP 5.2+ i ogólne 32-bitowe środowisko) obsługuje lata (w całości) 1902 do 2037 :
Poza tym nowsza
Date/Time
obsługa oparta jest na wersji 64-bitowej i ma zakres od około 292 miliardów do 292 miliardów lat , co prawdopodobnie przekracza potrzeby ludzkości w tym czasie.Ograniczenia WordPress
WordPress wprowadza i dziedziczy pewne dodatkowe ograniczenia w swojej podstawie kodu.
Przepływ danych
Z punktu widzenia podstawowego przepływu pracy użytkownika są przetwarzane dwa powiązane z datą:
Należy pamiętać, że są to technicznie całkowicie różne i niezależne procesy. Jak wyjaśniono dalej, ich zakresy nie nakładają się, a zapisanie prawidłowej daty nie oznacza zdolności do prawidłowego odczytu jej w środowisku WordPress.
Jawne ograniczenia
_wp_translate_postdata()
przetwarza rok (przesłany jako numer odrębny od formularza) i:wp_checkdate()
, który wywołuje PHP natywnycheckdate()
, co nakłada limit od 1 do 32767Domniemane limity
strtotime()
Funkcja PHP jest używana wiele razy i podlega wyżej wymienionemu znacznikowi czasu Unix, na najniższym poziomie,mysql2date()
który wpływa na wszystkie odczyty dat z bazy danych, dziedziczony zakres od 1902 do 2037get_gmt_from_date()
, który oczekuje roku([0-9]{1,4})
, ograniczając go do 1 9999 , silna możliwość podobnego przetwarzania w innych funkcjach, które będą wymagały dokładniejszego audytu koduMożliwość obejścia
wp_checkdate()
mawp_checkdate
filtr, który pozwala zastąpić tę kontrolę sprawdzania poprawnościdate_i18n()
który madate_i18n
filtr, teoretycznie pozwala całkowicie przechwycić i ponownie przetworzyć dane wyjściowe do interfejsu, jednak trudne, jeśli funkcja jest już przekazana pozafalse
wejście znacznika czasu poza zakresem ( )Wnioski
Ze względów praktycznych i możliwości przenoszenia danych zakres dat publikacji WordPress wydaje się być równy 32-bitowemu znacznikowi czasu Unix i obejmuje lata 1902–2037 włącznie .
W przypadku każdej operacji po dacie poza środowiskiem należy skontrolować środowisko (64-bitowy zakres uniksowych znaczników czasu, de facto działający MySQL lub alternatywna pamięć bazy danych dla wartości). W przypadku dalszych zakresów ( poniżej 1000, powyżej 9999 ) prawdopodobnie wymagane będą znaczne ilości niestandardowego kodu.
W przypadku dowolnej realizacji dowolnych dat sensowne jest:
Date/Time
kodu i / lub kontrolowanych funkcji WordPress, na które nie mają wpływu ograniczenia uniksowego znacznika czasuŁóżko testowe do kodu
Poniższy kod i ręcznie wybrany zestaw lat zostały wykorzystane do powyższych badań i testowania wniosków:
źródło
r()
?