Как отобразить дату как сегодня, вчера, а далее как обычно в системе указано?
Есть вот такой код, который выводит на всем сайте дату как сегодня, вчера, месяц назад, 2 года назад.
function wph_human_date($hdate = '') { if (!is_admin()) { $hdate = human_time_diff(get_the_time('U'), current_time('timestamp')) . ' назад'; } return $hdate; } add_filter('get_the_date', 'wph_human_date'); |
function wph_human_date($hdate = '') { if (!is_admin()) { $hdate = human_time_diff(get_the_time('U'), current_time('timestamp')) . ' назад'; } return $hdate; } add_filter('get_the_date', 'wph_human_date');
Но мне нужно чтобы отображались только сегодня и вчера, а далее уже 15.11.2023 также как и 5.2.2020
Дополнительно:
Что-то вроде этого?
function wph_human_date($hdate = '') { if (!is_admin()) { $post_date = get_the_time('d.m.Y'); $current_date = date('d.m.Y'); if ($post_date === $current_date) { $hdate = 'сегодня'; } elseif ($post_date === date('d.m.Y', strtotime('-1 day', strtotime($current_date)))) { $hdate = 'вчера'; } else { $hdate = $post_date; } } return $hdate; } add_filter('get_the_date', 'wph_human_date'); |
function wph_human_date($hdate = '') { if (!is_admin()) { $post_date = get_the_time('d.m.Y'); $current_date = date('d.m.Y'); if ($post_date === $current_date) { $hdate = 'сегодня'; } elseif ($post_date === date('d.m.Y', strtotime('-1 day', strtotime($current_date)))) { $hdate = 'вчера'; } else { $hdate = $post_date; } } return $hdate; } add_filter('get_the_date', 'wph_human_date');
- Почти. Этот код выдал ошибку после записей от даты "сегодня"
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4096 bytes) in /www/wwwroot/vicka.ru/wp-includes/plugin.php on line 173
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4096 bytes) in /www/wwwroot/vicka.ru/wp-includes/plugin.php on line 173
и далее записи не отобразились
- VEri63, немного поменял скрипт, попробуйте этот вариант
- Павел Романов, так работает, спасибо
Ответы:
Есть плагин https://ru.wordpress.org/plugins/today-yesterday-dates/
- Звучит хорошо, если бы не
Этот плагин не тестировался с последними 3 основными выпусками WordPress. Скорее всего, он уже не поддерживается и может быть несовместим с текущими версиями WordPress.
. Все таки рано или поздно даже самые простые плагины начинают не работать в новых версиях wp.
- Сниппеты точно так же рано или поздно перестают работать, потому что от плагинов они, по большому счету, отличаются только "оберткой". А по сути это те же обработчики тех же хуков.
- VEri63, можешь написать Флектору чтобы обновил дату релиза, он наш :) Можно прям на форум поддержки плагина писать по-русски
- YBB, бывает и такое, но не всегда
- Refguser, если писать то скорее не на этом форуме, т.к. на годовалой давности вопрос там даже не было отвечено почему-то
- VEri63, да куда угодно. За спрос не бьют в нос :)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для вывода даты как “сегодня”, “вчера”, а для остальных дней в обычном формате нужно сравнивать дату записи с текущей датой в часовом поясе WordPress. Не используйте просто
time()и системный timezone сервера: на хостинге он может отличаться от настроек сайта.Пример фильтра для
get_the_date():add_filter('get_the_date', function ($the_date, $format, $post) { if (!$post instanceof WP_Post) { return $the_date; } $post_ts = get_post_timestamp($post); if (!$post_ts) { return $the_date; } $today = wp_date('Y-m-d'); $post_day = wp_date('Y-m-d', $post_ts); $yesterday = wp_date('Y-m-d', current_time('timestamp') - DAY_IN_SECONDS); if ($post_day === $today) { return 'Сегодня'; } if ($post_day === $yesterday) { return 'Вчера'; } return wp_date($format ?: get_option('date_format'), $post_ts); }, 10, 3);
Если нужно показывать ещё и время, верните например
Сегодня в 14:30. Только не забывайте, что фильтр может затронуть все места сайта: архивы, карточки, single, виджеты.Если изменение нужно только в одном шаблоне, лучше не ставить глобальный фильтр, а сделать функцию
my_human_date($post_id)и вызвать её там, где нужно. Так меньше риск сломать SEO-разметку, sitemap или микроразметку, где ожидается обычная дата.Отдельно проверьте записи, опубликованные около полуночи. Именно там чаще всего появляются ошибки: сервер уже считает день новым, а WordPress в своей временной зоне ещё нет. Поэтому сравнение через
wp_date()иcurrent_time('timestamp')надёжнее, чем прямойdate().