В WordPress стандартная процедура удаления пользователя полностью удаляет все связанные с ним данные: записи, комментарии, метаданные и т.д. Однако в ряде случаев нужно сохранить какую-то информацию, например, комментарии или записи, но при этом удалить сам аккаунт пользователя. В этой статье мы разберём, как реализовать сохранение данных пользователя после удаления его аккаунта, используя кастомные решения и плагины.
Почему важно сохранять данные при удалении пользователя в WordPress
Удаление пользователя — это не всегда просто очистка его аккаунта с сайта. Часто в бизнес-процессах или при работе с сообществом важно сохранить:
- Комментарии пользователя для сохранения контекста обсуждений;
- Статьи, которые он написал, чтобы не потерять контент;
- Аналитические данные или метаданные, связанные с пользователем;
- Историю заказов или взаимодействий (для WooCommerce и других плагинов).
Если просто удалить пользователя через админку WordPress, эти данные могут быть также удалены или анонимизированы, что не всегда приемлемо.
Способы сохранения данных после удаления пользователя
1. Переназначение авторства записей
Самый простой способ — не удалять записи пользователя, а переназначить их другому пользователю, например, администратору или специальному системному аккаунту. В стандартном интерфейсе WordPress при удалении пользователя появляется опция «Переназначить записи». Это работает для постов и страниц.
Но что делать с комментариями и метаданными? Для этого нужно использовать дополнительный код.
2. Сохранение комментариев с анонимизацией
Чтобы сохранить комментарии, можно изменить автора комментария на анонимный или сохранить имя и email в кастомных полях, чтобы не потерять информацию, но и не оставлять привязку к удалённому аккаунту.
3. Сохранение пользовательских метаданных
Если у пользователя есть важные метаданные, например, поля из плагинов или кастомных решений, их нужно сохранить отдельно, например, в отдельной таблице или в JSON-формате в опциях сайта.
Пример кода: удаление пользователя с сохранением комментариев и метаданных
Ниже пример функции, которая при удалении пользователя сохраняет комментарии, переводя их в анонимные, и сохраняет метаданные в отдельной таблице.
function wpinc_save_user_data_before_deletion($user_id) {
global $wpdb;
// Получаем все комментарии пользователя
$comments = get_comments(['user_id' => $user_id]);
foreach ($comments as $comment) {
// Обновляем автора комментария на анонимного
wp_update_comment([
'comment_ID' => $comment->comment_ID,
'user_id' => 0,
'comment_author' => $comment->comment_author,
'comment_author_email' => $comment->comment_author_email
]);
}
// Получаем все метаданные пользователя
$user_meta = get_user_meta($user_id);
// Сохраняем метаданные в отдельной таблице wp_user_data_backup
foreach ($user_meta as $meta_key => $meta_values) {
foreach ($meta_values as $meta_value) {
$wpdb->insert(
$wpdb->prefix . 'user_data_backup',
[
'user_id' => $user_id,
'meta_key' => $meta_key,
'meta_value' => maybe_serialize($meta_value)
],
['%d', '%s', '%s']
);
}
}
}
// Хук перед удалением пользователя
add_action('delete_user', 'wpinc_save_user_data_before_deletion');Для работы этого кода нужно создать таблицу wp_user_data_backup в базе данных с полями user_id (INT), meta_key (VARCHAR), meta_value (TEXT).
Рекомендации по использованию плагинов для управления удалением пользователей
Если хочется использовать готовые решения, можно обратить внимание на следующие плагины:
- WP GDPR Compliance — помогает анонимизировать данные пользователя при удалении, сохраняя при этом контент.
- Delete Me — позволяет пользователям самостоятельно удалять аккаунты с сохранением контента.
- Clearfy Pro — комплексный плагин для оптимизации и безопасности, частично имеет инструменты для работы с пользовательскими данными.
Однако для глубокого кастомного решения часто проще реализовать логику самостоятельно, как показано в примере выше.
Особенности для сайтов с WooCommerce и пользовательскими данными
Если на сайте используется WooCommerce, удаление пользователя может привести к удалению заказов, что недопустимо. В WooCommerce заказы можно переназначить другому пользователю или оставить без привязки к аккаунту, используя ID покупателя или email. Для этого можно использовать следующий код для переназначения заказов:
function wpinc_reassign_woocommerce_orders($user_id, $new_user_id) {
if (!class_exists('WooCommerce')) {
return;
}
$orders = wc_get_orders(['customer_id' => $user_id]);
foreach ($orders as $order) {
$order->set_customer_id($new_user_id);
$order->save();
}
}Вызывать эту функцию можно перед удалением пользователя, чтобы сохранить историю заказов.
Выводы и рекомендации
Удаление пользователя в WordPress — процесс, требующий внимания к сохранению данных. Используйте переназначение контента, анонимизацию комментариев и сохранение метаданных, чтобы избежать потери важной информации.
Для автоматизации и расширенных возможностей рекомендуем использовать плагины и кастомные хук-функции, адаптированные под специфику вашего сайта.
Подробнее о плагинах и их настройке можно узнать на WPShop.ru.