Автоудаление пользователей Wordpress по времени с момента регистрации? - PullRequest
3 голосов
/ 14 марта 2011

В базовой настройке Wordpress 3.1 с User Access Manager можно ли автоматически удалять пользователей, которым x дней?

Я не нашел плагинов для этой функции.Как можно было бы реализовать это?Смогу ли я настроить задание cron с помощью запроса sql или php, при котором пользователи, которым, например, 3 дня, автоматически удаляются из базы данных один раз в день?Если да, то может кто-нибудь объяснить, как?

Любая помощь будет принята с благодарностью - заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 14 марта 2011

Вы хотите взглянуть на столбец user_registered в таблице wp_users. Поскольку вы используете WordPress, я предполагаю, что вы также используете MySQL - в этом случае вы можете использовать функцию DATEDIFF() в вашем SQL, чтобы определить, сколько дней назад они зарегистрировались.

SQL для удаления всех, кто 30 дней (или старше):

DELETE FROM `wp_users` 
WHERE datediff(now(), `user_registered`) >= 30

Вы можете заменить DELETE FROM на SELECT * FROM в этом запросе, чтобы увидеть, на каких пользователей повлияет удаление, если вы хотите просмотреть, кто будет удален запросом.

Вы можете настроить это как cronjob, используя язык по вашему выбору, который может быть PHP-скриптом, который просто запускает SQL выше. Затем вы можете запускать его каждый день в полночь, добавив в свой crontab следующее:

0 0 * * * php ~/delete_expired_users.php

Если вы новичок в cronjobs, то он будет просто запускать команду php ~/delete_expired_users.php каждый день (это означает *) в час 0, минута 0 (то есть в полночь). Дайте мне знать, если вам нужны более подробные инструкции.

1 голос
/ 15 июля 2013

Учтите, что wp_schedule_event () будет запускаться при каждой загрузке страницы, что может поставить под угрозу ваш сайт. Лучше проверить, есть ли у нас уже запланированное событие и только чем добавить его.

if( !wp_next_scheduled( 'my_dailyClearOut' ) ) {  
wp_schedule_event( time(), 'daily', 'my_dailyClearOut' );  
}  
1 голос
/ 07 апреля 2013

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

Первое - это использовать wp_delete_user () - это не только удалит запись пользователя, но и сотрет все связанные user_meta и сообщения, таким образом поддерживая вашу базу данных красивой и чистой.

Вторая рекомендация - использовать wp_schedule_event () - часть набора wp-cron функций. Это может быть предпочтительнее, если у вас нет гибкости или доступа к настройке crontab на вашем текущем хосте (обратите внимание на использование этого ниже).

wp_schedule_event(time(), 'daily', 'my_dailyClearOut');

function my_clearOldUsers() {
    global $wpdb;

    $query = $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE datediff(now(), user_registered) > 30");

    if ($oldUsers = $wpdb->get_results($query, ARRAY_N)) {
        foreach ($oldUsers as $user_id) {
            wp_delete_user($user_id[0]);
        }
    }
}

add_action('my_dailyClearOut', 'my_clearOldUsers');

Это должно сработать для вас (это именно то, что я сейчас использую).

Стоит отметить, что функции 'wp-cron' не совпадают со стандартным crontab - они запускаются только при доступе пользователя к сайту и, следовательно, далеко не так точны, как стандартный cron , Тем не менее, для этой конкретной функции, вы можете найти, что это хорошо.

Подсказка к @Sam для функции datediff() - это здорово!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...