Eu tenho uma chamada query_posts em um modelo WP. Com o uso do plug-in More Fields, posso dar ao administrador do site a capacidade de criar um evento (tipo de postagem personalizado) e inserir uma data formatada: AAAA / mm / dd.
A questão principal é; qual valor devo passar para a opção value na matriz meta_query? Atualmente, estou tentando passar "date (" Y / m / dh: i A ")" (menos as aspas), porque, pelo que entendi, isso imprimirá a data atual hoje. Não ligo para a hora da data, o que pode ser irrelevante. Por fim, estou tentando usar a opção de comparação para mostrar os próximos eventos, eventos passados em diferentes locais deste site. Em outro ponto, na verdade, preciso passar a opção de valor de uma matriz que imprima esse primeiro e último dia do mês atual, limitando a saída aos eventos que acontecem este mês.
<?php
query_posts( array(
'post_type' => 'event', // only query events
'meta_key' => 'event_date', // load up the event_date meta
'orderby' => 'meta_value', // sort by the event_date
'order' => 'asc', // ascending, so earlier events first
'posts_per_page' => '2',
'meta_query' => array( // restrict posts based on meta values
'key' => 'event_date', // which meta to query
'value' => date("Y/m/d h:i A"), // value for comparison
'compare' => '>=', // method of comparison
'type' => 'DATE' // datatype, we don't want to compare the string values
) // end meta_query array
) // end array
); // close query_posts call
?>
'type' => 'DATE'
?date_i18n()
, em vez do nativo phpdate()
.Depende em grande parte de como sua data é armazenada no meta-valor em primeiro lugar. Em geral, é uma boa idéia armazenar datas no MySQL como datas / timestamps do MySQL.
Os carimbos de data e hora do MySQL têm o formato
Y-m-d h:i:s
.No entanto, é sempre uma boa ideia usar as próprias funções de manipulação de datas do WP. Como tal, para obter a data atual no formato MySQL, use
current_time('mysql')
.Para formatar uma data do MySQL para exibição, use
mysql2date($format, $mysql_date)
. Nesse caso, é melhor exibir a data conforme configurada nas configurações, então use$format = get_option('date_format');
.Para armazenar uma data selecionada pelo usuário, você terá que transcodificá-la para uma data do MySQL. Para fazer isso, o caminho mais fácil - mas não mais seguro - é
date('Y-m-d h:i:s', $unix_timestamp);
.$unix_timestamp
muitas vezes pode ser derivado viastrtotime($user_input)
.No entanto,
strtotime()
não realiza verificações de sanidade por conta própria, por isso é melhor escrever sua própria função de conversão.Quanto a obter o intervalo do mês, aqui está uma função que estou usando para obter os limites do mês para qualquer registro de data e hora do MySQL:
Se você deseja obter os limites da semana, o WP já vem com uma função para isso:,
get_weekstartend($time);
que também entrega os limites como uma matriz.Você pode usá-los em seu
meta_query
argumento fazendo duas comparações separadas.fonte
Y-m-d G:i:s
"?G:i:s
é de 24 horas,h:i:s
é de 12 horas.Acabei indo com o seguinte. Eu configurei um campo de evento-dia e comparando a partir daí. Obrigado pela ajuda
fonte
Oi abaixo Estou postando minha solução. Onde eu armazenei a data no
Y-m-d H:i
formato (como 31-07-2013 16:45).O evento que termina após Hoje será consultado apenas por
meta_query
.date_default_timezone_set('Asia/Calcutta');
Defino o fuso horário padrão para a
date()
função.fonte