Как использовать сообщения запроса() с фильтром даты в пользовательском поле?
Я определил пользовательский тип записи, который использует мета-поле для хранения дат.
В моем functions.php У меня есть следующий код, который сохраняет дату начала. Формат даты, отправляемой в параметре формы startdate
, равен 2010/12/01 9:00 AM
add_action('save_post', 'save_details');
function save_details(){
global $post;
update_post_meta($post->ID, "startdate", $_POST["startdate"]);
}
Я пытаюсь вывести список всех событий с startdate
позже текущего времени.
query_posts(array(
'post_type' => array('seminar'),
'meta_key=startdate',
'meta_value='.date("Y/m/d h:i A"),
'meta_compare=>'
));
Здесь перечислены все события, независимо от даты их начала. Что я делаю неправильно?
РЕШЕНО:
По какой-то причине после того, как я изменил свой код на следующий, он просто работает.
$args = array(
'post_type' => array('seminar'),
'showposts' => 3,
'meta_key' => 'startdate',
'meta_value' => date("Y/m/d h:i A"),
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$seminars = get_posts($args);
Я собираюсь выбрать ответ от @Rarst как принятый, потому что я думаю, что на самом деле у меня было несколько проблем, происходящих здесь, но он решил проблему, связанную с названием best.
У @sorich87 была хорошая мысль о том, как я должен был хранить даты в виде меток времени, но, в конце концов, @Rarst был прав, если бы я указал аргумент формата для date()
функция, которая соответствует формату, который я использовал при хранении данных в базе данных, тогда я должен иметь возможность сравнивать данные.
Спасибо за всю помощь.
4 answers
Вы сохраняете дату в виде форматированной строки, но функция time()
, которую вы используете для сравнения, возвращает числовую метку времени. Таким образом, вы пытаетесь сравнить слишком разные форматы, и вряд ли WP достаточно умен, чтобы понять это.
Я бы преобразовал дату в метку времени перед ее сохранением:
add_action('save_post', 'save_details');
function save_details(){
global $post;
update_post_meta($post->ID, "startdate", strtotime($_POST["startdate"]));
}
И используйте текущую метку времени для сравнения:
query_posts(array(
'post_type' => array('seminar'),
'meta_key=startdate',
'meta_value='.time(),
'meta_compare=>'
));
Возможно, это сработает?
query_posts(array(
'post_type' => array('seminar'),
'meta_key' => 'startdate',
'orderby'=> 'meta_value',
'order' => 'ASC'
));
-
Сохраните значение в базе данных, например:
'enddate' => date('Y-m-d');
Генерировать мета-запрос, например :
А. Условие:
$conArr[0] = array
(
'key'=> 'enddate',
'value' => date('Y-m-d'),
'compare' => '>=',
);
Б. Запрос:
$args = array(
'meta_query'=>$conArr ,
'post_type'=>'tournament',
'orderby' => 'meta_value_num',
)
Важно 'orderby' => 'meta_value_num',
и формат даты важны.