Понадобилось мне создать к посту дополнение, которое скрывалось по прошествии определенного времени с момента публикации. К плагинам я прибегать не стал, а воспользовался для этого функцией подсчета прошедшего с момента публикации времени и произвольными полями.
Всю задачу можно разделить на две:
- подсчет прошедшего времени с момента публикации
- вывод содержимого произвольного поля в зависимости от первой величины
Подсчет прошедшего с момента публикации времени
Для подсчета времени, прошедшего с момента публикации поста, нужно вставить в файл functions.php:
function showDate($date) // $date --> время в формате Unix time { $stf = 0; $cur_time = time(); $diff = $cur_time - $date; $seconds = array('секунда', 'секунды', 'секунд'); $minutes = array('минута', 'минуты', 'минут'); $hours = array('час', 'часа', 'часов'); $days = array('день', 'дня', 'дней'); $weeks = array('неделя', 'недели', 'недель'); $months = array('месяц', 'месяца', 'месяцев'); $years = array('год', 'года', 'лет'); $decades = array('десятилетие', 'десятилетия', 'десятилетий'); $phrase = array($seconds, $minutes, $hours, $days, $weeks, $months, $years, $decades); $length = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600); for ($i = sizeof($length) - 1; ($i >= 0) && (($no = $diff / $length[$i]) <= 1); $i--) ; if ($i = 1) && (($cur_time - $_time) > 0)) $value .= time_ago($_time); return $value . ' назад'; } function getPhrase($number, $titles) { $cases = array (2, 0, 1, 1, 1, 2); return $titles[ ($number%100>4 && $number%100 время в формате Unix time { $stf = 0; $cur_time = time(); $diff = $cur_time - $date; $days = $diff / (60*60*24); return $days; }
Первая функция showDate позволяет получать время публикации в относительном формате, а вторая функция showexpireflag вычисляет, сколько прошло времени с момента публикации.
Вывод контента по прошествии определенного времени
Для вычисления прошедшего времени в файл single.php нужно вставить:
</pre> <p>После этого в файле single.php можно указать область, в которой нужно выводить временные данные. Например:</p> <pre> 30 ) : ?> тут выводится содержимое, если прошло более 30 дней
Понятно, что постоянно исправлять исходный код файлов используемой темы не очень удобно, поэтому для автоматического добавления контента можно воспользоваться произвольными полями. Например, для ввода любого содержимого можно создать произвольное поле ads_after. Вы можете вставить в это поле любой HTML-текст. Чтобы вывести значение поля ads_after только по прошествии определенного времени, используйте в файле single.php следующий код:
30 ) : ?> $val_val ) echo $val_val; } ?>
Если вам нужно выводить значение поля ads_after только первые 30 дней, а потом скрыть, то нужно всего лишь поменять в условии знак > на <:
<?php if ( $dateflag $val_val ) echo $val_val; } ?>
Можно вообще сделать комбинированный способ: если еще не прошло 30 дней с момента публикации, то показывать значение произвольного поля ads_before, а если прошло, то показывать значение другого произвольного поля ads_before:
30 ) : ?> $val_val ) echo $val_val; } ?> $val_val ) echo $val_val; } ?>
Для чего такое нужно? Вариантов масса – публикация объявлений, вывод рекламы только в новых/старых постах, скрытие временной рекламы по прошествии определенного времени.