Статьи

Отображение даты и времени в цикле WordPress

Добавление даты и времени в цикл WordPress кажется достаточно простой задачей, верно?

Ну да. Это может быть случай написания простого тега шаблона и позволить WordPress сделать всю работу за вас. Но иногда вы можете столкнуться с проблемами по пути.

В этом кратком совете я покажу вам различные функции, которые WordPress предоставляет для отображения даты и времени, и расскажу, какие из них использовать, если вы столкнетесь с трудностями.

WordPress предоставляет вам четыре функции для вывода даты и / или времени. Эти:

  • the_date() : по умолчанию будет 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, SMY ) будет выводиться во вторник, 20 ноября 2018 года .
  • the_time( 'g:i a' ) выдаст 2:03 вечера .
  • echo get_the_time( 'G:i' ) выдаст 14:03 .
  • the_time( 'g:ia, D, j F y' ) будет выводиться в 14:03, вторник, 20 ноября, 18 .

Если вы используете the_date() для вывода дат на странице архива, и вы обнаружите, что дата не отображается для некоторых сообщений, то это потому, что the_date() не повторяет дату для последующих сообщений, опубликованных в тот же день как предыдущий.

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

Но если вы хотите, чтобы у всех сообщений была дата вывода с заголовком и любым другим содержимым, которое вы выводите, вам нужно использовать другую функцию. Вы можете использовать любую из трех других функций выше.

Самый простой вариант — заменить the_date() на echo get_the_date() . Если вы хотите добавить время, the_time() либо the_time() либо echo get_the_time() .

Примечание. Если вас озадачивает тот факт, что the_date() вызывает эту проблему, а the_time() — нет, это потому, что публикации, опубликованные в одну и ту же дату, не были опубликованы в одно и то же время. Чтобы это произошло, вам придется приложить немало усилий: либо составить расписание публикаций, либо отредактировать время публикации, либо координировать усилия двух блоггеров!

У меня была эта проблема в шаблоне главной страницы темы, которую я написал для клиента. В этом шаблоне было несколько циклов, все из которых приводили к различным типам контента на сайте, и все они были закодированы с использованием WP_Query . Проблема не была очевидна до дня, когда они добавили два сообщения (не то, что они обычно делали). Они были озадачены тем, почему дата второго поста не появилась на домашней странице, и продолжали редактировать ее, обновляя и переиздавая, пока не сдались и не спросили меня.

Вот оригинальный код:

01
02
03
04
05
06
07
08
09
10
<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 endwhile;
</ul>

Я отредактировал функцию так, чтобы она читалась так:

01
02
03
04
05
06
07
08
09
10
<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 endwhile;
</ul>

В начале строки li class="home newsletter" я заменил the_date( 'j, F' ) на echo get_the_date( 'j, F' ) . Это решило проблему.

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