На базовой настройке WordPress 3.1 с помощью User Access Manager можно автоматически удалить пользователей, которым исполнилось x дней?
Я не нашел плагинов для этой функции. Как можно было бы реализовать это? Смогу ли я настроить задание cron с запросом sql или php, когда пользователи, которые, например, 3 дня, автоматически удаляются из базы данных один раз в день? Если да, может кто-нибудь объяснить, как?
Любая помощь будет принята с благодарностью – заблаговременно.
Вы хотите посмотреть столбец 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
(то есть полночь). Дайте мне знать, если вам нужны более подробные инструкции.
Лично я бы рекомендовал использовать пару собственных функций 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. Однако для этой конкретной функциональности вы можете обнаружить, что это нормально.
Hat-tip для @Sam для функции datediff()
– это аккуратно!
Имейте в виду, что wp_schedule_event () будет запущен при каждой загрузке страницы, что может поставить под угрозу ваш сайт. Лучше проверить, есть ли у нас уже запланированное событие и только добавить его.
if( !wp_next_scheduled( 'my_dailyClearOut' ) ) { wp_schedule_event( time(), 'daily', 'my_dailyClearOut' ); }