it-swarm.dev

Czy używanie pliku „date_default_timezone_set” w pliku wtyczki jest bezpieczne?

Używam wtyczki sitemaps, która w bardzo złożony sposób ustawia strefę czasową <lastmod> (tj. Czas ostatniej modyfikacji) dla postów na GMT.

Tymczasowo, dopóki programista wtyczki nie naprawi tego, muszę wymusić niestandardową strefę czasową na wtyczce . Prostym i prostym sposobem, jaki znalazłem, jest dodanie czegoś takiego jak date_default_timezone_set( 'America/New_York'); zaraz po pierwszym <?php w pliku odpowiedzialnym za wyświetlanie map witryn.

Działa i wydaje się, że nie wpływa na znaczniki czasu wyświetlane w pozostałej części witryny. Czy mogę to zrobić? czy jest lepsze rozwiązanie?

3
its_me

http://codex.wordpress.org/Function_Reference/get_gmt_from_date

Zamień wszystkie wystąpienia get_the_date lub the_date na echo get_gmt_from_date(get_the_date('Y-m-d H:i:s')). To nie jest szybka poprawka, to sposób na naprawienie map witryn.

EDYTOWAĆ:

WordPress SEO uruchamia swoje surowe daty z MySQL za pomocą funkcji WP o nazwie mysql2date, która z kolei wywołuje date_i18n. date_i18n ma przydatny filtr, z którym możesz się połączyć, aby zmienić datę:

<?php
add_filter('date_i18n', 'wpse57195_filter_date', 10, 4);
/**
 * Changes the date on WordPress SEO's sitemaps
 *
 * @return string The Date
 */
function wpse57195_filter_date($date, $format, $timestamp, $gmt)
{
    // if this isn't a sitemap page, bail
    if(!get_query_var('sitemap'))
        return $date;

    // W3C Time format with -05:00 for central time
    // NOTE: this doesn't account for daylight saving time
    $f = 'Y-m-d\TH:i:s-05:00';
    return $gmt ? gmdate($f, $timestamp) : date($f, $timestamp);
}

W zahaczonej funkcji możesz sprawdzić zmienną kwerendy mapy witryny i zmienić czas zgodnie z potrzebami. Aby zachować specyfikację sitemap , musisz użyć formatu daty W3C , który zawiera pole +/- dla strefy czasowej. -05: 00 to numer centralnego czasu letniego. Możesz zawinąć powyższe w górę do wtyczki i aktywować, dopóki mapa witryny nie zostanie naprawiona.

1
chrisguitarguy

Obecnie wbudowana funkcja current_time() oczekuje, że funkcja date_default_timezone_set() nigdy nie będzie używana.

Sprawdzanie kodu funkcji current_time() potwierdziło to, ponieważ ta funkcja formatuje wynik za pomocą funkcji PHP wbudowanej funkcji date() (na którą wpływa strefa czasowa); w rzeczywistości Wordpress zawsze resetuje strefę czasową do UTC (funkcja echo date_default_timezone_get() umieszczona na górze i na dole wp-config.php w czystej konfiguracji WordPressa to udowodni).

Zobacz https://core.trac.wordpress.org/ticket/38940

1
Marco Marsala

No. (cóż, możesz natychmiast zmienić to z powrotem po zakończeniu, ale to jest podatne na błędy.)

Ponadto, cokolwiek robisz, nie zastępuj date_default_timezone_set () w wp-config.php; wp-settings.php ustawia to na UTC i nie możesz go zmieniać.

Ustawienie na przykład w Europie/Londynie (co jest godziną przed GMT w lecie) sprawi, że GMT będzie godzinę przed tym, co powinno być - możesz zweryfikować za pomocą /wp-admin/options-general.php

Zasadniczo oznacza to, że wartości strefy czasowej systemu /etc/timezone i wartości PHP date.timezone ini są ignorowane przez WordPress.

IMHO, powinno być jakieś ostrzeżenie w rdzeniu WordPress, jeśli jest ustawione na wartość inną niż UTC, ale nie ma, więc uważaj.

Powiązane pytanie WPSE - Powiązany blog

0
William Turrell