it-swarm.dev

É seguro usar 'date_default_timezone_set' no arquivo plugin?

Estou usando um plug-in de sitemaps que, de formas muito complexas, define o fuso horário de <lastmod> (ou seja, o horário da última modificação) para as postagens no GMT.

Temporariamente, até que o desenvolvedor do plugin conserte isso, eu preciso aplicar um fuso horário personalizado no plugin . A maneira simples e direta que encontrei é adicionar algo como date_default_timezone_set( 'America/New_York'); logo após o primeiro <?php no arquivo responsável pela saída dos sitemaps.

Ele funciona e não parece afetar os timestamps exibidos no restante do site. Então, posso ir com isso? ou há uma solução melhor?

3
its_me

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

Substitua todas as instâncias de get_the_date ou the_date por echo get_gmt_from_date(get_the_date('Y-m-d H:i:s')). Isso não é uma solução rápida, é uma maneira de corrigir seus sitemaps.

EDITAR:

O WordPress SEO executa suas datas brutas do MySQL através de uma função WP chamada mysql2date, que por sua vez chama date_i18n. date_i18n tem um filtro útil que você pode amarrar para mudar a 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);
}

Na função hooked, você pode verificar a variável de consulta do sitemap e alterar a hora conforme necessário. Para manter a especificação sitemap , você precisa usar o formato de data W3C que inclui um campo +/- para o fuso horário. -05: 00 é o número para o horário de verão central. Você pode encapsular o arquivo acima em um plugin e ativá-lo até que o sitemap possa ser corrigido.

1
chrisguitarguy

Atualmente, a função interna current_time() espera que a função date_default_timezone_set() nunca seja usada.

Inspecionar o código de current_time() confirmou isso, porque essa função formata o resultado usando a função PHP built-in date() (que é afetada pelo fuso horário); na verdade parece Wordpress sempre redefine o fuso horário para UTC (um echo date_default_timezone_get() colocado no topo e na parte inferior do wp-config.php em uma configuração limpa WordPress irá provar isso).

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

1
Marco Marsala

No. (bem, você pode alterá-lo imediatamente depois que terminar, mas isso é propenso a erros.)

Além disso, faça o que fizer, não substitua date_default_timezone_set () em seu wp-config.php; wp-settings.php define isso para UTC e você não deve alterá-lo.

A definição para a Europa/Londres, por exemplo (que é uma hora à frente do GMT no verão), fará com que o GMT uma hora à frente do que deveria ser - você pode verificar via /wp-admin/options-general.php

Essencialmente, isso significa que valores do fuso horário do sistema /etc/timezone e do valor date.timezone ini do PHP são ignorados pelo WordPress.

IMHO, deve haver algum tipo de aviso no núcleo do WordPress, se for definido para um valor diferente de UTC, mas não há, então cuidado.

Related WPSE question - Blog relacionado

0
William Turrell