środa, 10 sierpnia 2011

date() nieprawidłowy czas w WordPressie

W ramach pisania własnego pluginu musiałam się zmierzyć z problemem w środowisku WP, jak się okazało, niebanalnym.

date('Y-m-d H:i:s');

Powyższy kod powinien zwrócić datę, godzinę, minuty i sekundy zgodne z lokalnymi ustawieniami serwera na którym działa PHP. Ale nie zwraca. Zwraca czas Greenwich, czyli na tę chwilę 2 godziny wcześniej, niż powinno. Sprawdziłam locale, odpaliłam PHP z linii komand. Wszystko cacy. To czemu w WP ten czas jest niezgodny z lokalnym?? Ano, WP sobie nadpisuje ustawienia...

Jak to rozwiązać? Użyć funkcji current_time() dostarczanej przez WP. Funkcja ta z parametrem "timestamp" zwróci lokalny czas serwera, a nie GMT:

date('Y-m-d H:i:s', current_time('timestamp'));

I problem z głowy. I tylko nie rozumiem skąd poniższy tekst w dokumentacji WP:
WARNING: current_time('timestamp',1) returns (as a timestamp) the server time, not (as expected) GMT! Because this is exactly what PHP's time() returns, current_time('timestamp',1) is superfluous and unnecessary -- use time().

Dlaczego powinnam oczekiwać, że zostanie zwrócony czas GMT? Czy ja o czymś nie wiem? Wcale mi się nie podoba zmienianie działania natywnych funkcji PHP. A do poprawnego działania mojego pluginu potrzebuję aktualnego czasu serwera. I muszę sięgać prawą ręką do lewej kieszeni, żeby wyciągnąć prostą rzecz.

czwartek, 4 sierpnia 2011

PHP Fatal error: wp-includes/cache.php on line 93

PHP Fatal error: Call to a member function get() on a non-object in [...]/wp-includes/cache.php on line 93

Od godziny staram sie znalezc ki diabel? I co? I gdzies trafilam na info, ze to uzywanie funkcji wp_cache_[akcja]() (np wp_cache_get()) daje taki efekt. Grep na katalogu z moja skorka nic nie zwrocil...

Wylaczylam wszystkie pluginy. Czysto, zero bledu. zaczelam je wlaczac po kolei i bach... Aktywowanie pluginu, ktory wlasnie pisze powoduje ten blad. No to stara metoda zakomentowalam calosc i dawaj odkomentowywac po kawalku. I co?

wp_deregister_script('handlerDoSkryptu');


bylo przyczyna. Chcialam to zrobic dobrze i przedobrzylam. Niewazne ile skryptow zarejestruje, WP ewidentnie sam je czysci. Jak moj obiekt przestaje istniec (uruchamia sie __destruct()) to o globalnym obiekcie $wp_object_cache aplikacja juz nic nie wie, bo niszczy go gdzies wczesniej.