Как выполнить действие при использовании редактора плагинов/тем?

Вопрос или проблема

Я пытаюсь записывать множество действий WP, чтобы создать аудиторский след. Я хотел бы полностью отключить редакторы плагинов и тем, но это не вариант. Эти функции кажутся очень слабыми в плане расширяемости, лучший вариант, который я вижу, это прослушивать валидацию нонса и фильтровать все их. Кто-нибудь знает альтернативный, менее хрупкий способ запуска немного кода каждый раз, когда редактор плагинов или тем сохраняет файл?

Действие ajax, которое выполняется при обновлении темы или плагина, это edit-theme-plugin-file, поэтому вы должны иметь возможность подключиться к нему, запустив код на хук wp_ajax_edit-theme-plugin-file.

add_action('wp_ajax_edit-theme-plugin-file', 'log_cowboy_coders', 0);

function log_cowboy_coders() {
    $user = get_current_user_id();
    if (!empty($__POST['theme'])) {
        // Записываем, что кто-то редактирует тему
    } else if (!empty($__POST['plugin'])) {
        // Записываем, что кто-то редактирует плагин
    }
    if (!empty($__POST['file'])) {
        // Записываем, какой файл они редактируют
    }
}

Весь обновленный содержимое этого файла также включено в данные POST ($__POST['newcontent']), поэтому если вы запустите свою функцию до того, как сработает действие ajax по умолчанию, вы, вероятно, сможете получить оригинальное содержимое и сохранить разницу между двумя.

.

Ответ или решение

Чтобы выполнять действия при использовании редактора плагинов и тем в WordPress, вам нужно привязаться к соответствующей AJAX-действию WordPress. В данном случае, как упомянуто в обсуждении, при обновлении файлов тем или плагинов вызывается действие edit-theme-plugin-file, и вы можете использовать хук wp_ajax_edit-theme-plugin-file, чтобы отслеживать изменения. Это обеспечивает вам возможность регистрировать все действия, выполняемые в редакторе, и создавать аудит изменений.

Шаги для реализации логирования действий

  1. Создание функции для логирования: Вам нужно определить функцию, которая будет записывать действия пользователя. Внутри этой функции вы сможете идентифицировать, редактируется ли тема или плагин, а также определить изменённый файл.

  2. Подключение к AJAX-хуку: Используйте хук wp_ajax_edit-theme-plugin-file, чтобы ваша функция выполнялась при каждом сохранении изменений через редактор.

  3. Получение данных: Ваша функция должна получить и обработать данные, переданные через POST-запрос, чтобы узнать, какой именно файл редактируется и какие изменения были внесены.

Пример реализации

Вот пример кода, который можно использовать для регистрации действий:

add_action('wp_ajax_edit-theme-plugin-file', 'log_cowboy_coders', 0);

function log_cowboy_coders() {
    $user = get_current_user_id();

    // Проверка, редактируется ли тема
    if (!empty($_POST['theme'])) {
        error_log("Пользователь с ID $user редактирует тему: " . sanitize_text_field($_POST['theme']));
    }

    // Проверка, редактируется ли плагин
    else if (!empty($_POST['plugin'])) {
        error_log("Пользователь с ID $user редактирует плагин: " . sanitize_text_field($_POST['plugin']));
    }

    // Получение имени редактируемого файла
    if (!empty($_POST['file'])) {
        $file = sanitize_file_name($_POST['file']);
        error_log("Файл, который редактируется: $file");

        // Получение нового содержимого файла
        $new_content = $_POST['newcontent'] ?? '';
        // Логика для сохранения старого содержимого или сравнения с новым содержимым
    }
}

Рекомендации

  • Фильтрация входящих данных: Используйте функции sanitize_text_field() и sanitize_file_name(), чтобы защитить приложение от атак через вводимые значения.
  • Логирование: Настройте механизм логирования, используя error_log() или настраивая собственную систему логов для более удобного мониторинга.
  • Пользовательский интерфейс: Если необходимо предоставлять отчёты о изменениях пользователям, можно дополнительно создать интерфейс в админке WordPress, отображающий журнал изменений.

Заключение

Таким образом, используя хук wp_ajax_edit-theme-plugin-file, вы можете легко регистрировать действия пользователей при редактировании файлов тем и плагинов в WordPress. Этот способ является менее хрупким, чем попытка фильтровать каждый вызов на основе nonce, так как он привязан непосредственно к обработке AJAX-запросов. Регулярное логирование изменений поможет вам создать надежный аудит и мониторинг активности на вашем веб-сайте.

Оцените материал
Добавить комментарий

Капча загружается...