Как установить отпуск по учету в WordPress: практическое руководство

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

Почему важен учет отпуска в WordPress

Учет отпусков позволяет организовать рабочий процесс команды, избежать конфликтов при назначении задач и публикации, а также повысить прозрачность. Если вы ведете сайт с несколькими авторами, важно знать, кто из них временно недоступен. Это может пригодиться в новостных порталах, учебных проектах, корпоративных сайтах и многом другом.

Основные задачи, которые решает учет отпуска в WordPress:

  • Отметить в профиле пользователя период отпуска с датами начала и окончания.
  • Автоматически отображать статус отпуска в административной части и на сайте.
  • Блокировать публикацию и редактирование контента в период отпуска.
  • Отправлять напоминания и уведомления о приближении или окончании отпуска.

Выбор плагина для учета отпуска в WordPress

Среди готовых решений для управления отпусками в WordPress можно выделить несколько плагинов:

  • WP User Vacation — простой плагин для отметки отпуска с отображением статуса в профиле.
  • WP Team Vacation Manager — более функциональное решение с календарями, уведомлениями и интеграцией с ролями.
  • Clearfy Pro — универсальный плагин оптимизации и управления, в котором есть расширенные возможности для кастомизации профилей пользователей, включая создание дополнительных полей для отпуска.

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

Пример: добавление поля отпуска в профиль пользователя через Clearfy Pro

Clearfy Pro позволяет создавать кастомные поля в профиле пользователя без программирования. Вы можете добавить два поля — дату начала и дату окончания отпуска, а затем вывести статус в админке и на сайте.

Подробнее о Clearfy Pro и его возможностях вы можете узнать на странице плагина https://wpshop.ru/plugins/clearfy-pro/.

Создание простого кастомного решения для учета отпуска

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

1. Добавление полей отпуска в профиль пользователя

function wpapp_add_vacation_fields($user) {
    ?>
    <h3>Настройки отпуска</h3>
    <table class="form-table">
        <tr>
            <th><label for="wpapp_vacation_start">Дата начала отпуска</label></th>
            <td><input type="date" name="wpapp_vacation_start" id="wpapp_vacation_start" value="<?php echo esc_attr(get_user_meta($user->ID, 'wpapp_vacation_start', true)); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label for="wpapp_vacation_end">Дата окончания отпуска</label></th>
            <td><input type="date" name="wpapp_vacation_end" id="wpapp_vacation_end" value="<?php echo esc_attr(get_user_meta($user->ID, 'wpapp_vacation_end', true)); ?>" class="regular-text" /></td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'wpapp_add_vacation_fields');
add_action('edit_user_profile', 'wpapp_add_vacation_fields');

2. Сохранение данных отпуска

function wpapp_save_vacation_fields($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    if (isset($_POST['wpapp_vacation_start'])) {
        update_user_meta($user_id, 'wpapp_vacation_start', sanitize_text_field($_POST['wpapp_vacation_start']));
    }
    if (isset($_POST['wpapp_vacation_end'])) {
        update_user_meta($user_id, 'wpapp_vacation_end', sanitize_text_field($_POST['wpapp_vacation_end']));
    }
}
add_action('personal_options_update', 'wpapp_save_vacation_fields');
add_action('edit_user_profile_update', 'wpapp_save_vacation_fields');

3. Проверка и блокировка публикации во время отпуска

Теперь добавим проверку, которая не позволит пользователю публиковать или редактировать посты, если сейчас его отпуск.

function wpapp_block_post_publishing_if_on_vacation($data, $postarr) {
    $user_id = get_current_user_id();
    $start = get_user_meta($user_id, 'wpapp_vacation_start', true);
    $end = get_user_meta($user_id, 'wpapp_vacation_end', true);

    if (!$start || !$end) {
        return $data; // Если даты не заданы, пропускаем
    }

    $today = date('Y-m-d');
    if ($today >= $start && $today <= $end) {
        wp_die('Вы не можете публиковать или редактировать записи в период отпуска.');
    }
    return $data;
}
add_filter('wp_insert_post_data', 'wpapp_block_post_publishing_if_on_vacation', 10, 2);

Отображение статуса отпуска на сайте и в админке

Полезно показать статус отпуска не только в профиле, но и на фронтенде или в административной панели — например, в списке авторов или рядом с их именем.

Добавим функцию для проверки, находится ли пользователь в отпуске:

function wpapp_is_user_on_vacation($user_id) {
    $start = get_user_meta($user_id, 'wpapp_vacation_start', true);
    $end = get_user_meta($user_id, 'wpapp_vacation_end', true);
    if (!$start || !$end) {
        return false;
    }
    $today = date('Y-m-d');
    return ($today >= $start && $today <= $end);
}

Используйте эту функцию, чтобы выводить рядом с именем пользователя значок или текст "В отпуске".

Пример вывода статуса в шаблоне автора:

$author_id = get_the_author_meta('ID');
if (wpapp_is_user_on_vacation($author_id)) {
    echo '<span style="color:red; font-weight:bold;">В отпуске</span>';
}

Дополнительные рекомендации и интеграция с WPShop

Если вы используете плагины из WPShop, например, для управления ролями или профилями, стоит обратить внимание на их возможности по расширению пользовательских данных. Плагин Clearfy Pro отлично подходит для добавления дополнительных пользовательских полей и создания условий отображения.

Для уведомлений и автоматизации можно рассмотреть интеграцию с плагинами, поддерживающими WP-Cron, чтобы отправлять напоминания о начале и окончании отпуска. В связке с WPStories можно создавать визуальные уведомления для команды прямо на сайте.

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

Итог

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

Наш каталог плагинов WordPress