2011-03-14 94 views
3

在使用User Access Manager的基本Wordpress 3.1設置中,是否可以自動刪除x天之前的用戶?自注冊後根據時間自動刪除Wordpress用戶?

我找不到這個功能的插件。怎麼去實現這個呢?我是否可以使用sql或php查詢設置cron作業,例如每天一次自動從數據庫中刪除例如3天的用戶?如果是這樣,有人可以解釋一下嗎?

任何幫助將不勝感激 - 在此先感謝。

+0

想指出,這似乎是唯一可用的資源在線這個問題 - 非常有幫助! –

回答

6

您想查看wp_users表中的user_registered列。既然你使用的是WordPress,我會假設你也在使用MySQL--在這種情況下,你可以在你的SQL中使用DATEDIFF()函數來計算他們註冊了多少天。

刪除大家的SQL誰是30天(或以上)爲:

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

您可以在查詢與SELECT * FROM更換DELETE FROM看到刪除會影響哪些用戶,如果你想預覽誰將被查詢刪除。

您可以使用您選擇的語言將其設置爲cronjob,這可能是一個只運行上述SQL的PHP​​腳本。然後,您可以每天運行在午夜通過將以下到你的crontab:

0 0 * * * php ~/delete_expired_users.php 

如果你是新來cronjobs,那麼就乾脆每天(這是該*表示)在運行命令php ~/delete_expired_users.php小時0,分鐘0(即午夜)。如果您需要更詳細的說明,請告訴我。

+0

非常感謝,這聽起來正是我要找的。如果沒有太多的麻煩,你可以提供更詳細的說明嗎?我並不熟悉sql/php,我是一名前端開發人員,而且客戶非常喜歡這個。再次非常感謝,非常感謝 – Joel

+0

您可能想看看[本教程](http://onlamp.com/pub/a/php/2004/02/19/php_foundations.html),它將帶領您只需連接到數據庫並執行查詢即可。確保你有備份! –

+0

不要忘記,如果有人給出了一個答案,你感覺回答你的問題,這是一個好主意,將其標記爲已接受 - 只需點擊該答案旁邊的大綠色勾號即可。 –

1

就個人而言,我會建議使用一些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 to @Sam datediff()函數 - 很簡單!

1

請注意,wp_schedule_event()將在每次頁面加載時觸發,這可能會危害您的網站。更好地檢查我們是否已經有一個預定的事件,只有添加它。

if(!wp_next_scheduled('my_dailyClearOut')) { 
wp_schedule_event(time(), 'daily', 'my_dailyClearOut'); 
}