根据注册时间自动删除 Wordpress 用户?
Posted
技术标签:
【中文标题】根据注册时间自动删除 Wordpress 用户?【英文标题】:Auto delete Wordpress users according to time since registering? 【发布时间】:2011-07-15 07:46:16 【问题描述】:在使用用户访问管理器的基本 Wordpress 3.1 设置中,是否可以自动删除 x 天前的用户?
我没有找到此功能的插件。一个人将如何实现这一点?我是否可以使用 sql 或 php 查询设置 cron 作业,例如每天自动从数据库中删除 3 天的用户?如果是这样,有人可以解释一下吗?
任何帮助将不胜感激 - 在此先感谢。
【问题讨论】:
想指出,这似乎是该问题的唯一可用在线资源 - 非常有帮助! 【参考方案1】:您想查看wp_users
表中的user_registered
列。由于您使用的是 WordPress,我假设您也在使用 mysql — 在这种情况下,您可以在 SQL 中使用 DATEDIFF()
函数来计算他们在几天前注册。
删除 30 天(或更早)的所有人的 SQL 是:
DELETE FROM `wp_users`
WHERE datediff(now(), `user_registered`) >= 30
您可以在该查询中将DELETE FROM
替换为SELECT * FROM
,以查看删除会影响哪些用户,如果您想预览查询将删除哪些用户。
您可以使用您选择的语言将其设置为 cronjob,这可能是一个仅运行上述 SQL 的 PHP 脚本。然后,您可以通过将以下内容放入您的 crontab 中,在每天午夜运行它:
0 0 * * * php ~/delete_expired_users.php
如果您是 cronjobs 的新手,那么您只需每天在小时 0
、分钟 0
(即午夜)运行命令 php ~/delete_expired_users.php
(即 *
表示)。如果您需要更详细的说明,请告诉我。
【讨论】:
非常感谢,这听起来正是我正在寻找的。如果不是太麻烦,您能否提供一些更详细的说明?我对 sql/php 不是很熟悉,我是一名前端开发人员,并且一个客户非常愿意拥有它。再次感谢,非常感谢 您可能想看看this tutorial,它将带您完成简单的连接到数据库并执行查询。确保备份! 别忘了,如果有人给出的答案让您觉得回答了您的问题,最好将其标记为已接受 - 只需点击该答案旁边的绿色大勾号即可。 谢谢 - 它正在工作,但它也在选择要删除的管理员帐户。有没有办法防止 ID 为 1 和 2 的前 2 个帐户被此查询删除?再次感谢您的帮助。 您只需要在该 SQL 查询的末尾添加 WHERE id > 2。【参考方案2】:就个人而言,我建议您使用一些 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 相同 - 它们仅在用户访问站点时触发,因此远不如标准精确克朗。但是,对于这个特定的功能,您可能会发现这很好。
向@Sam 致以datediff()
函数的帽子提示 - 太棒了!
【讨论】:
【参考方案3】:请注意 wp_schedule_event() 将在每次页面加载时触发,这可能会危及您的网站。最好检查一下我们是否已经有一个预定的事件并且只添加它。
if( !wp_next_scheduled( 'my_dailyClearOut' ) )
wp_schedule_event( time(), 'daily', 'my_dailyClearOut' );
【讨论】:
以上是关于根据注册时间自动删除 Wordpress 用户?的主要内容,如果未能解决你的问题,请参考以下文章
php 根据当前注册的图像尺寸(Wordpress),根据最小高度自动限制最小上传尺寸
如何使用“主题我的登录”插件在 wordpress 登录表单中自动填写字段?