Отображение даты и времени в цикле WordPress
Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)
Добавление времени и даты в цикл WordPress кажется довольно простой задачей, верно?
Ну, хорошо. Нужно закодить простой тег для шаблона и позволить WordPress сделать всё остальное. Но иногда можно повстречаться с проблемами.
В этом коротком уроке, я покажу разные функции WordPress, позволяющие отображать дату и время, и расскажу какую из них использовать, если у вас возникли трудности.
Доступные теги шаблона
У WordPress есть четыре функции для вывода даты и/или времени. Вот они:
-
the_date(). По умолчанию, это выводит дату записи (поста) в форматеF j, Y, поэтому, если запись была опубликована 20 ноября 2018 года, то это выдаст Ноябрь 20, 2018. -
get_the_date()— эта функция возвращает дату, но не выводит её. Чтобы вывести её, используйтеecho get_the_date(), что даст вам тот же результат, что иthe_date(). Это полезно, если в вашем коде уже используетсяecho. Это также поможет обойти проблему с не отображением дат, вскоре увидите. -
the_time()иget_the_time()— по умолчанию, с помощью них вы получите время, но, если укажите формат даты, то получите и дату. Вы конечно можете использовать их для вывода даты, если зададите её формат, но для даты всё же разумнее использоватьthe_date()илиecho get_the_date().
Форматирование даты
У каждой функции есть определённый формат, который вы можете переопределить, если пожелаете. Для этого, нужно использовать PHP стандарт форматирования даты и времени.
Вот некоторые примеры для материалов, опубликованных 20 ноября 2018.
-
the_date()по умолчанию выведет Ноябрь 20, 2018. -
echo get_the_date( l, S M Y )выдаст Вторник, 20 нояб 2018. -
the_time( 'g:i a' )выдаст 2:03 pm. -
echo get_the_time( 'G:i' )выдаст нам 14:03. -
the_time( 'g:i a, D, j F y' )выдаст 2:03 pm, Вт, 20 ноября 18.
Решение проблем с датами в цикле: отсутствующие даты на странице архивов
Если для вывода дат на странице архивов, вы используете the_date(), и обнаружили, что для некоторых записей даты не отображаются, так это потому, что the_date() не повторяет даты для остальных записей, опубликованных в тот же день.
Вы, конечно, можете оставить это как есть, если не хотите повторять дату для каждой записи того же дня.
Но, если вы хотите, чтобы у каждой записи была своя дата, заголовок и другие детали, то вам нужна другая функция. Можете использовать любую из трёх других, упомянутых выше.
Наипростейший способ решения, это заменить the_date() на echo get_the_date(). Если хотели добавить ещё и время, тогда подойдут либо the_time(), либо echo get_the_time().
Примечание: если вас смущает тот факт, что the_date() имеет такую проблему, а the_time() нет, так это потому, что записи опубликованы в ту же дату, но в разное время. Нужно будет приложить много усилий, на планирование сообщений, редактирование времени публикаций или координация усилий двух блоггеров, чтобы такое произошло!
У меня была такая проблема в шаблоне главной страницы темы, которую я делала для клиента. В этом шаблоне было множество циклов для разных типов содержимого и во всех использовался WP_Query. Проблема не была очевидной до того дня, когда они добавили несколько записей (чего они обычно не делали). Они были озадачены тем, почему дата второй записи не появилась на домашней странице и продолжали её редактировать, обновлять и пересоздавать, пока не сдались и не спросили у меня.
Вот исходный код:
1 |
<ul class="newsletters"> |
2 |
<?php $query = new WP_Query( array( |
3 |
'post_type' => 'post', |
4 |
'category_name' => 'newsletters', |
5 |
'posts_per_page' => 8 |
6 |
) ); |
7 |
while ($query->have_posts()) : $query->the_post(); ?> |
8 |
<li class="home newsletter"><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php the_date( 'j F' ); ?></a></li> |
9 |
<?php endwhile; ?> |
10 |
</ul>
|
Я отредактировала одну функцию и теперь она выглядит вот так:
1 |
<ul class="newsletters"> |
2 |
<?php $query = new WP_Query( array( |
3 |
'post_type' => 'post', |
4 |
'category_name' => 'newsletters', |
5 |
'posts_per_page' => 8 |
6 |
) ); |
7 |
while ($query->have_posts()) : $query->the_post(); ?> |
8 |
<li class="home newsletter"><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php echo get_the_date( 'j F' ); ?></a></li> |
9 |
<?php endwhile; ?> |
10 |
</ul>
|
В строке, начинающейся с li class="home newsletter", я заменила the_date( 'j, F' ) на echo get_the_date( 'j, F' ). Это исправило проблему.
Так что, если вы когда-нибудь обнаружите, что даты не показываются в ваших архивах, то это может быть решением.



