у меня есть пользовательское поле expirydate, которое сделано из acf как средство выбора даты … с кодом ниже, я пытаюсь удалить сообщение, которое истекло … по какой-то причине код не работает.
$arg= get_posts(array('post_type' => tokens, 'numberposts' => -1));
foreach ( $arg as $post ) : setup_postdata($post);
if (!empty($post))
{
$expiry=get_field('expiry',$post->ID);
$today=date("d/m/Y");
if ($today>$expiry) {
echo $expiry."expired <br>";
wp_delete_post($postid);
}
else {
echo "not expired"."<br>";
}
}
endforeach;
echo "process completed";
?>
состояние $today>$expiry
всегда возвращает ложь
Ты сравниваешь строки, не даты. Так 31/1/2014
больше, чем 01/12/2014
потому что 3> 1, когда сравнивая строки.
Чтобы правильно сравнивать даты, либо используйте формат строки, который правильно сопоставим, либо используйте DateTime()
объекты, которые сопоставимы.
$expiry = DateTime::createFromFormat('d/m/y', get_field('expiry',$post->ID));
$today = new DateTime();
if ($today > $expiry) {
Я советую не использовать strtotime()
для сравнения дат, как это делает не принять во внимание летнее время.
Других решений пока нет …