Добавление времени и даты в цикл 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' ). Это исправило проблему.

Так что, если вы когда-нибудь обнаружите, что даты не показываются в ваших архивах, то это может быть решением.

Источник: code.tutsplus.com