Mam wywołanie query_posts w szablonie WP. Dzięki zastosowaniu wtyczki More Fields mogę dać administratorowi strony możliwość utworzenia zdarzenia (niestandardowy typ postu), a następnie wprowadzić sformatowaną datę: RRRR / mm / dd.
Główne pytanie brzmi; jaką wartość powinienem przekazać do opcji value w tablicy meta_query? Obecnie próbuję przekazać „date („ T / m / dh: i A ”)” (bez cudzysłowów), ponieważ, jak rozumiem, wydrukuje bieżącą datę dzisiaj. Nie dbam o datę, więc może to być nieistotne. Nareszcie próbuję skorzystać z opcji porównania, aby dopilnować pokazania nadchodzących wydarzeń, przeszłych wydarzeń w różnych miejscach na tej stronie. W innym miejscu muszę przekazać opcji value tablicę, która drukuje pierwszy i ostatni dzień bieżącego miesiąca, ograniczając wynik do zdarzeń mających miejsce w tym miesiącu.
<?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()
zamiast php nativedate()
.W dużej mierze zależy to od sposobu przechowywania daty w meta wartości. Zasadniczo dobrym pomysłem jest przechowywanie dat w MySQL jako dat / znaczników czasu MySQL.
Znaczniki czasu MySQL mają format
Y-m-d h:i:s
.Jednak zawsze dobrym pomysłem jest korzystanie z własnych funkcji zmiany daty w WP. Aby uzyskać bieżącą datę w formacie MySQL, użyj
current_time('mysql')
.Aby sformatować datę MySQL do wyświetlania, użyj
mysql2date($format, $mysql_date)
. W takim przypadku najlepiej wyświetlić datę skonfigurowaną w ustawieniach, więc użyj$format = get_option('date_format');
.Aby zapisać datę wybraną przez użytkownika, musisz transkodować ją na datę MySQL. Aby to zrobić, najłatwiejszym - ale nie najbezpieczniejszym - sposobem
date('Y-m-d h:i:s', $unix_timestamp);
.$unix_timestamp
często można uzyskać za pośrednictwemstrtotime($user_input)
.Jednak
strtotime()
nie wykonuje samodzielnie kontroli poprawności, dlatego najlepiej napisać własną funkcję konwersji.Jeśli chodzi o uzyskanie zakresu miesięcy, oto funkcja, której używam, aby uzyskać granice miesięcy dla dowolnego znacznika czasu MySQL:
Jeśli chcesz uzyskać granice tygodnia, WP ma już do tego funkcję
get_weekstartend($time);
:, która również dostarcza granice jako tablicę.Możesz następnie użyć ich w swoim
meta_query
argumencie, wykonując dwa osobne porównania.źródło
Y-m-d G:i:s
”?G:i:s
jest 24-godzinny,h:i:s
to 12-godzinny.Skończyło się na tym, że: Ustawiam pole wydarzenia-moment i porównuję stamtąd. dzięki za pomoc
źródło
Cześć, poniżej zamieszczam swoje rozwiązanie. Gdzie przechowuję datę w
Y-m-d H:i
formacie (np. 2013-07-31 16:45).Wydarzenie, które zakończy się po dniu dzisiejszym, będzie wyszukiwane tylko przez
meta_query
.date_default_timezone_set('Asia/Calcutta');
Ustawiam domyślną strefę czasową dla
date()
funkcji.źródło