Как создать WordPress шорткод отображающий дату

Как создать WordPress шорткод отображающий дату

В сегодняшнем уроке, вернемся немного к 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"]'); ?>

На этом все, удачи!

Поделиться в соцсетях:
Статьи на похожую тематику

С вашим WordPress сайтом проблемы? нужен дополнительный функционал? нестандартный плагин или сверстать новую страницу?
Тогда напишите мне через форму обратной связи, и я постараюсь вам помочь.

Комментарии
  1. Владимир

    Спасибо за статью! Как в выводить в шаблоне время по Москве? [date template="H:i:s"]

    ответить
    1. Pavel
      20.03.2019 в 09:15 автор блога

      Есть несколько вариантов:
      1. Зная время сервера, к ф-и time() прибавить разницу во времени и указать вторым параметров в date() ф-и
      2. В начале шорткода, указать таймзону Москвы а в конце шорткода указать таймзону сервера.

      ответить
      1. Владимир

        Большое спасибо за ответ) Буду пробовать)

        ответить
        1. Владимир

          Может кому пригодиться, решил таким образом:
          // Шорткод дата и время
          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']);
          });

          ответить
          1. Pavel
            20.03.2019 в 10:04 автор блога

            Так но не так. См. 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);
            Вы когда вставили шорткод, изменили для всего последующего кода таймзону. А этого может и не стоило бы делать (от ситуации зависит)

  2. Светлана

    Спасибо, все получилось. Только вопрос, как сделать, чтоб время было по Москве? А то в выводимом шорткоде получается -3 часа.

    ответить
    1. Pavel
      17.09.2020 в 09:54 автор блога

      Не лучший вариант, использовать ф-ю date_default_timezone_set в шорткоде, перед вызовом ф-и date. При этом, установив временную зону Москвы.
      Лучший вариант. Использовать аналог wp ф-и php date. А именно - wp_date('Y-m-d H:i'), только указав свой шаблон даты.

      ответить
      1. Светлана

        Спасибо!! Я вообще не знакома с РНР, а с вашей помощью настроила вывод даты и времени на сайте.

        ответить
  3. Seo

    Спасибо. Шорткод работает.
    Мне нужно было вывести месяц словом. Я использовал такой шорткод: [date template="F,Y"] и был вывод такой:"February,2021". Подскажите, можно ли перевести месяц на другой язык?

    ответить
    1. Pavel
      05.02.2021 в 20:31 автор блога

      Попробуйте вместо date(...), использовать WP эквивалент wp_date(...)

      ответить
      1. seo

        В таком случае вывод получается числовой: "2021-02-05"

        ответить
        1. Pavel
          05.02.2021 в 21:45 автор блога

          Вы уверены? если у вас год-месяц-дата, то вы по идее передаете другой формат даты, не тот что указали в шорткоде. Разбирайтесь, все должно работать. Читайте документацию по функции на оф. сайте. И см. форматы даты для php функции date()

          ответить
Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *