根据注册时间自动删除 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 用户?的主要内容,如果未能解决你的问题,请参考以下文章

从 Wordpress 取消注册自定义帖子类型

php 根据当前注册的图像尺寸(Wordpress),根据最小高度自动限制最小上传尺寸

如何使用“主题我的登录”插件在 wordpress 登录表单中自动填写字段?

将 Wordpress 的登录/注册页面重定向到自定义登录/注册页面

如何根据wordpress中的当前帖子自动选择一个值?

如何根据“用户元”删除所有用户和帖子?