В некоторых проектах полезно отображать на сайте, сколько времени он работает с момента запуска. Например, это может быть элемент доверия для посетителей или часть фирменного стиля. В этой статье разберём, как создать динамическую функцию в WordPress, которая будет показывать время работы сайта в днях, часах, минутах и секундах.
Почему важно использовать динамическое отображение времени работы сайта
Статическое отображение даты запуска сайта не всегда удобно и информативно. Если просто указать дату, посетителю придётся считать самостоятельно. Динамическое же значение обновляется автоматически и всегда показывает актуальное время, что выглядит более профессионально.
Кроме того, динамическая функция позволяет гибко настраивать формат отображения и использовать данные в различных частях сайта — в виджетах, шорткодах или темах.
Основные шаги создания функции отображения времени работы сайта
Для решения задачи нам нужно:
- Определить дату запуска сайта — можно сохранить её в настройках WordPress или в константе;
- Рассчитать разницу между текущим временем и датой запуска;
- Преобразовать разницу в читаемый формат (дни, часы, минуты, секунды);
- Вывести результат в удобном виде, например, через шорткод.
Рассмотрим пример реализации.
Сохранение даты запуска сайта
Лучше всего дату запуска сайта сохранить в настройках, чтобы менять её при необходимости без правки кода. Для этого используем опцию WordPress. Например, добавим дату запуска через админку или при активации темы/плагина.
function wpmarket_set_site_launch_date() {
if ( ! get_option('wpmarket_site_launch_date') ) {
update_option('wpmarket_site_launch_date', '2023-01-01 00:00:00');
}
}
add_action('after_setup_theme', 'wpmarket_set_site_launch_date');В этом примере дата запуска установлена 1 января 2023 года. При необходимости вы можете изменить её через базу данных или добавить интерфейс для редактирования.
Функция для вычисления времени работы сайта
Создадим функцию wpmarket_get_site_uptime(), которая будет возвращать строку с временем работы.
function wpmarket_get_site_uptime() {
$launch_date = get_option('wpmarket_site_launch_date');
if ( ! $launch_date ) {
return 'Дата запуска не установлена';
}
$launch_timestamp = strtotime($launch_date);
$current_timestamp = current_time('timestamp');
if ($current_timestamp < $launch_timestamp) {
return 'Дата запуска в будущем';
}
$diff = $current_timestamp - $launch_timestamp;
$days = floor($diff / 86400);
$diff %= 86400;
$hours = floor($diff / 3600);
$diff %= 3600;
$minutes = floor($diff / 60);
$seconds = $diff % 60;
return sprintf('%d дней, %d часов, %d минут, %d секунд', $days, $hours, $minutes, $seconds);
}Здесь мы корректно обрабатываем данные, учитывая локальное время WordPress через current_time('timestamp').
Вывод времени работы сайта через шорткод
Чтобы удобно использовать функцию в контенте страниц и записей, создадим шорткод.
function wpmarket_uptime_shortcode() {
return wpmarket_get_site_uptime();
}
add_shortcode('wpmarket_uptime', 'wpmarket_uptime_shortcode');Теперь в любом месте сайта можно вставить [wpmarket_uptime], и будет показано актуальное время работы.
Дополнительные возможности и улучшения
Кэширование результата для оптимизации
Поскольку время обновляется каждую секунду, при большом трафике есть смысл кэшировать результат на минуту, чтобы снизить нагрузку на базу данных.
function wpmarket_get_site_uptime_cached() {
$cache_key = 'wpmarket_site_uptime';
$uptime = get_transient($cache_key);
if ($uptime === false) {
$uptime = wpmarket_get_site_uptime();
set_transient($cache_key, $uptime, 60); // Кэш на 60 секунд
}
return $uptime;
}
function wpmarket_uptime_shortcode_cached() {
return wpmarket_get_site_uptime_cached();
}
add_shortcode('wpmarket_uptime', 'wpmarket_uptime_shortcode_cached');Такой подход значительно уменьшит количество обращений к базе.
Использование в виджете
Если хотите выводить время работы сайта в сайдбаре, можно создать небольшой виджет.
class WPMarket_Uptime_Widget extends WP_Widget {
public function __construct() {
parent::__construct('wpmarket_uptime_widget', 'Время работы сайта (WPMarket)');
}
public function widget($args, $instance) {
echo $args['before_widget'];
if ( ! empty($instance['title']) ) {
echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
}
echo '<p>' . wpmarket_get_site_uptime_cached() . '</p>';
echo $args['after_widget'];
}
public function form($instance) {
$title = ! empty($instance['title']) ? $instance['title'] : 'Время работы сайта';
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>">Заголовок:</label>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<?php
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? sanitize_text_field($new_instance['title']) : '';
return $instance;
}
}
function wpmarket_register_uptime_widget() {
register_widget('WPMarket_Uptime_Widget');
}
add_action('widgets_init', 'wpmarket_register_uptime_widget');Теперь в разделе виджетов появится новый элемент, который можно разместить в любом сайдбаре.
Интеграция с плагинами WPShop
Если вы используете темы или плагины из каталога WPShop, например, темы Reboot или Root, то эту функцию можно встроить в шаблоны через шорткод или напрямую вызвать функцию wpmarket_get_site_uptime() в нужных местах.
Также вы можете добавить отображение времени работы в модальные окна с помощью плагина My Popup, чтобы привлечь внимание посетителей к этому показателю.
Вывод
Создание динамической функции, показывающей время работы сайта, — простой и интересный способ добавить уникальность вашему проекту. С помощью приведённого кода вы легко сможете реализовать этот функционал, а также расширить его под свои задачи.