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
. Проблема не была очевидной до того дня, когда они добавили несколько записей (чего они обычно не делали). Они были озадачены тем, почему дата второй записи не появилась на домашней странице и продолжали её редактировать, обновлять и пересоздавать, пока не сдались и не спросили у меня.
Вот исходный код:
<ul class="newsletters"> <?php $query = new WP_Query( array( 'post_type' => 'post', 'category_name' => 'newsletters', 'posts_per_page' => 8 ) ); while ($query->have_posts()) : $query->the_post(); ?> <li class="home newsletter"><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php the_date( 'j F' ); ?></a></li> <?php endwhile; ?> </ul>
Я отредактировала одну функцию и теперь она выглядит вот так:
<ul class="newsletters"> <?php $query = new WP_Query( array( 'post_type' => 'post', 'category_name' => 'newsletters', 'posts_per_page' => 8 ) ); while ($query->have_posts()) : $query->the_post(); ?> <li class="home newsletter"><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php echo get_the_date( 'j F' ); ?></a></li> <?php endwhile; ?> </ul>
В строке, начинающейся с li class="home newsletter"
, я заменила the_date( 'j, F' )
на echo get_the_date( 'j, F' )
. Это исправило проблему.
Так что, если вы когда-нибудь обнаружите, что даты не показываются в ваших архивах, то это может быть решением.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post