Как снять пост с «публикации» в определенное время? Опять custom fields
[ ←Вернуться к стандартному виду ]
Кусочек кода, найденного на форуме wordpress.org, позволяет модифицировать цикл (Loop) так, что после определённой даты определенная запись в цикле не показывается, для каждой записи можно задать индивидуальную дату «снятия с публикации» в ленте постов. Фактически запись существует по своей ссылке, т.е. статус у неё не меняется и остается как и прежде «опубликовано», просто в конкретной ленте постов она не выводится.
Что значит «конкретная лента постов»? Например, в теме default несколько файлов-шаблонов с циклом: index.phpосновной шаблон (используется для главной страницы), archive.php— шаблон для вывода рубрик и архивов и т.д.
В свете таких особенностей этого способа использовать его можно, опять же, для отображения записей на главной странице с определённым концом срока публикации.
Для этого создаем у записи произвольное поле expirationи в значение ему пишем дату окончания показа в таком виде: гггг/мм/дд, пример 2008/11/05
Итак, находим начало цикла:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
и следом дописываем:
<?php //to check against expiration date;
$currentdate = date("Ymd");
$expirationdate = get_post_custom_values('expiration');
if (is_null($expirationdate)) {
$expirestring = '30005050'; //MAKE UN-EXPIRING POSTS ALWAYS SHOW UP;
} else {
if (is_array($expirationdate)) {
$expirestringarray = implode($expirationdate);
}
$expirestring = str_replace("/","",$expirestringarray);
} //else
if ( $expirestring > $currentdate ) { ?>
затем находим в конце цикла endwhileи перед ним дописываем <?php } ?>, получаем:
<?php } //end if for expiration; ?> <?php endwhile; ?>
Источник: http://wordpress.org/support/topic/205765
Также нашла ещё один вариант, где задается не только дата, но и время вплоть до секунд, недостаток (достоинство?) его в том, что записи, у которых нет произвольного поля expirationв цикле не выводятся совсем: How to: Set post expiration date/time on your WordPress blog