В сегодняшнем уроке, вернемся немного к WP и рассмотрим пример разработки шорткода отображающего дату в произвольном формате. Формат будет задаваться шаблоном PHP функции date().
PHP код шорткода
Код нашего шорткода довольно прост имеет всего навсего пару строк:
add_shortcode("date", function($atts) { //Sets $atts = shortcode_atts(array( 'template' => date('Y-m-d'), ),$atts); return date($atts['template']); });
Где:
date — название нашего шорткода
shortcode_atts() - wordpress функция, устанавливающая данные для шорткода по умолчанию. В нашем случае, если параметр шаблона даты «template» не будет установлен, будет применен шаблон «Y-m-d», т. е. «гггг-мм-дд»(или год-месяц-день).
date() - стандартная PHP ф-я работы с датой (вернее отображающая ее). В нее, первым аргументом, мы как рази и помещаем шаблон формата отображения даты. Подробнее, о том как есть способы формирования даты, вы можете найти в интернете, на официальном сайте PHP.
Данный PHP код, разместите в файле «functions.php» вашей темы.
Как использовать шорткод
Для того что бы использовать шорткод, в текстовом редакторе WordPress, для теста введем следующий текст.
Без параметра - [date] Год - [date template="Y"] Год и месяц - [date template="Y-m"] Год, месяц и день - [date template="Y-m-d"] Текущее время - [date template="H:i:s"]
Описания думаю не нужно, с текста выше оно должно быть и так понятно. Но если что, прошу к комментариям.
На фронтенде (на странице или в посте), т. е. там где будет отображаться результат работы нашего шорткода, вы сможете увидеть следующее:
Без параметра — 2019-01-12
Год — 2019
Год и месяц — 2019-01
Год, месяц и день — 2019-01-12
Текущее время — 14:53:36
Дата и время может отличаться, т. к. выше опубликовано время тестирования шорткода.
Где может быть полезен данный шорткод? Вопрос хороший, сейчас я вижу только одно место где его можно использовать. Это подвал сайта, где обычно публикуется год создания сайта и текущий год.
Что бы реализовать нечто подобное, используйте следующий код:
2014 - <?php echo do_shortcode('[date template="Y"]'); ?>
На этом все, удачи!
Спасибо за статью! Как в выводить в шаблоне время по Москве? [date template="H:i:s"]
Есть несколько вариантов:
1. Зная время сервера, к ф-и time() прибавить разницу во времени и указать вторым параметров в date() ф-и
2. В начале шорткода, указать таймзону Москвы а в конце шорткода указать таймзону сервера.
Большое спасибо за ответ) Буду пробовать)
Может кому пригодиться, решил таким образом:
// Шорткод дата и время
add_shortcode("date", function($atts){
//Sets
date_default_timezone_set('Europe/Moscow');
$atts = shortcode_atts(array(
'template' => date('Y-m-d'),
),$atts);
return date($atts['template']);
});
Так но не так. См. https://plance.top/php/kak-poluchit-vremya-vseh-taymzon-timezone-na-php.html
В начале укажите $default_timezone = date_default_timezone_get();
А в конце, перед ретурном - date_default_timezone_set($default_timezone);
Вы когда вставили шорткод, изменили для всего последующего кода таймзону. А этого может и не стоило бы делать (от ситуации зависит)
Спасибо, все получилось. Только вопрос, как сделать, чтоб время было по Москве? А то в выводимом шорткоде получается -3 часа.
Не лучший вариант, использовать ф-ю date_default_timezone_set в шорткоде, перед вызовом ф-и date. При этом, установив временную зону Москвы.
Лучший вариант. Использовать аналог wp ф-и php date. А именно - wp_date('Y-m-d H:i'), только указав свой шаблон даты.
Спасибо!! Я вообще не знакома с РНР, а с вашей помощью настроила вывод даты и времени на сайте.
Спасибо. Шорткод работает.
Мне нужно было вывести месяц словом. Я использовал такой шорткод: [date template="F,Y"] и был вывод такой:"February,2021". Подскажите, можно ли перевести месяц на другой язык?
Попробуйте вместо date(...), использовать WP эквивалент wp_date(...)
В таком случае вывод получается числовой: "2021-02-05"
Вы уверены? если у вас год-месяц-дата, то вы по идее передаете другой формат даты, не тот что указали в шорткоде. Разбирайтесь, все должно работать. Читайте документацию по функции на оф. сайте. И см. форматы даты для php функции date()