Я собираюсь создать «будущее» -blogg (вроде научно-фантастического приключения в форме блога) и хочу показать все даты +100 лет. Например, опубликованная публикация 2012-05-17 должна отображать дату 2112-05-17.
Сначала я подумал, что могу просто установить дату на 2112-05-17, но кажется, что WordPress не может обрабатывать даты выше 2049.
Поэтому моя следующая идея – изменить способ отображения дат. Я думал о том, чтобы изменить get_the_date () в целом-template.php и заставить его вернуться к более поздней дате.
Но здесь моих навыков недостаточно. Я ничего не знаю о том, как работать с значениями даты в php.
get_the_date () выглядит так:
function get_the_date( $d = '' ) { global $post; $the_date = ''; if ( '' == $d ) $the_date .= mysql2date(get_option('date_format'), $post->post_date); else $the_date .= mysql2date($d, $post->post_date); return apply_filters('get_the_date', $the_date, $d); }
Любые идеи о том, как его изменить? Таким образом, он добавляет 100 лет до даты, прежде чем возвращать его?
Любой вход был бы appriciated 🙂
Похоже, вам, возможно, придется исследовать date_modify, а также strtotime
http://php.net/manual/en/datetime.modify.php
Предполагая, что ваши даты mysql имеют следующий формат: ГГГГ-ММ-ДД
function add100yr( $date="2011-03-04" ) { $timezone=date_timezone_get(); date_default_timezone_set($timezone); list($year, $month, $day) = split(':', $date); $timestamp=mktime(0,0,0, $month, $day, $year); // 100 years, 365.25 days/yr, 24h/day, 60min/h, 60sec/min $seconds = 100 * 365.25 * 24 * 60 * 60; $newdate = date("Ymd", $timestamp+$seconds ); // $newdate is now formatted YYYY-mm-dd }
Теперь вы можете:
function get_the_date( $d = '' ) { global $post; $the_date = ''; if ( '' == $d ) $the_date .= mysql2date(get_option('date_format'), add100yr($post->post_date)); else $the_date .= mysql2date($d, add100yr($post->post_date)); return apply_filters('get_the_date', $the_date, $d); }
Попробуйте настраиваемое поле: http://codex.wordpress.org/Custom_Fields
Вам нужно будет ввести дату +100 год для каждого сообщения, но тогда вы не будете полагаться на php или функции, чтобы изменить текущую дату.
WordPress предоставляет фильтр get_the_date
который позволяет изменить значение до того, как оно будет обработано темой или плагином.
Этот фильтр используется каждый раз, когда get_the_date()
.
add_filter( 'get_the_date', 'modify_get_the_date', 10, 3 ); function modify_get_the_date( $value, $format, $post ) { $date = new DateTime( $post->post_date ); $date->modify( "+100 years" ); if ( $format == "" ) $format = get_option( "date_format" ); return( $date->format( $format ) ); }
Эта функция принимает post_date
из сообщения, добавляет время и возвращает его в соответствии с форматом, заданным для get_the_date()
или с форматом по умолчанию, настроенным в параметрах WordPress.