it-swarm.dev

È sicuro utilizzare 'date_default_timezone_set' nel file di estensione?

Sto usando un plug-in Sitemaps che in modi molto complessi imposta il fuso orario di <lastmod> (cioè l'ultima ora modificata) per i post su GMT.

Temporaneamente, finché lo sviluppatore del plugin non lo risolve, ho bisogno di applicare un fuso orario personalizzato sul plugin . Il modo semplice e diretto che ho trovato è di aggiungere qualcosa come date_default_timezone_set( 'America/New_York'); subito dopo il primo <?php nel file responsabile dell'emissione delle sitemap.

Funziona, e non sembra influenzare i timestamp visualizzati sul resto del sito. Quindi, posso andare con questo? o c'è una soluzione migliore?

3
its_me

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

Sostituisci tutte le istanze di get_the_date o the_date con echo get_gmt_from_date(get_the_date('Y-m-d H:i:s')). Non è una soluzione rapida, è un modo per correggere le tue Sitemap.

MODIFICARE:

WordPress SEO esegue le date non elaborate da MySQL tramite una funzione WP chiamata mysql2date, che a sua volta chiama date_i18n. date_i18n capita di avere un comodo filtro al quale puoi legare per cambiare la data:

<?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);
}

Nella funzione agganciata, puoi verificare la variabile di query della Sitemap e cambiare l'ora di cui hai bisogno. Per mantenere con sitemap spec , devi usare il formato data W3C che include un campo +/- per il fuso orario. -05: 00 è il numero per centrale, ora legale. Puoi racchiudere il sopra sopra in un plug-in e attivarlo finché la sitemap non può essere riparata.

1
chrisguitarguy

Attualmente, la funzione built-in current_time() si aspetta che la funzione date_default_timezone_set() non sia mai usata.

L'ispezione del codice di current_time() lo ha confermato, poiché quella funzione formatta il risultato utilizzando PHP funzione date() incorporata (che è influenzata dal fuso orario); infatti sembra che Wordpress ripristini sempre il fuso orario in UTC (un echo date_default_timezone_get() posto in alto e in basso in wp-config.php in una configurazione di WordPress pulita lo dimostrerà).

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

1
Marco Marsala

No. (beh, è ​​possibile cambiarlo immediatamente dopo aver finito, ma questo è soggetto a errori).

Inoltre, qualunque cosa tu faccia, non eseguire l'override di date_default_timezone_set () nel tuo wp-config.php; wp-settings.php lo imposta su UTC e non devi cambiarlo.

L'impostazione per l'Europa/Londra, ad esempio (che è un'ora avanti rispetto a GMT in estate), renderà GMT un'ora avanti rispetto a quello che dovrebbe essere - è possibile verificare tramite /wp-admin/options-general.php

In sostanza, ciò significa che i valori del fuso orario del sistema /etc/timezone e il valore date.timezone ini di PHP vengono ignorati da WordPress.

IMHO, ci dovrebbe essere una sorta di avviso nel core di WordPress se è impostato su un valore diverso da UTC, ma non c'è, quindi attenzione.

Domanda WPSE correlata - Blog correlato

0
William Turrell