2011-03-14 4 views
3

사용자 액세스 관리자가 설치된 기본 Wordpress 3.1 설치에서 x 일이 지난 사용자를 자동으로 삭제할 수 있습니까?등록 후 Wordpress 사용자를 시간별로 자동 삭제 하시겠습니까?

이 기능에 대한 플러그인을 찾을 수 없습니다. 어떻게 이것을 구현할 것인가? 예를 들어 3 일 이전의 사용자가 매일 데이터베이스에서 자동으로 삭제되는 SQL 또는 PHP 쿼리로 cron 작업을 설정할 수 있습니까? 그렇다면 누군가가 어떻게 설명 할 수 있습니까?

모든 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

이 질문에 온라인으로 제공되는 유일한 리소스 인 것 같습니다. 대단히 도움이됩니다. –

답변

6

wp_users 테이블의 user_registered 열을보고 싶습니다. 당신이 WordPress를 사용하고 있기 때문에 MySQL을 사용하고 있다고 가정 할 것입니다.이 경우 SQL에 DATEDIFF() 함수를 사용하여 며칠 전에 등록했는지 계산할 수 있습니다.

삼십일 세 (이상) 모든 사람을 삭제하는 SQL은 다음과 같습니다 당신이 원하는 경우

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

당신은, 삭제가 영향을 줄 수있는 사용자를보고 해당 쿼리에 SELECT * FROM으로 DELETE FROM을 대체 할 수 누가 쿼리에 의해 삭제 될지 미리보기.

위의 SQL을 실행하는 PHP 스크립트 일 수도있는 원하는 언어를 사용하여 cronjob으로 설정할 수 있습니다. 그런 다음 당신의 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-크론'기능을 하지 표준의 crontab과 동일한 지 주목할 필요가 - 그들은 사용자가 사이트에 액세스하는 경우에만 해고, 따라서 어디 근처 표준 크론만큼 정확됩니다. 그러나이 특정 기능의 경우이 방법이 유용 할 수 있습니다.

datediff() 함수의 @Sam에 대한 모자 팁 - 멋지다!

1

모든 페이지로드시 wp_schedule_event()가 실행되므로 사이트가 손상 될 수 있습니다. 이미 예약 된 일정이 있고 추가 한 경우에만 확인하는 것이 좋습니다.

if(!wp_next_scheduled('my_dailyClearOut')) { 
wp_schedule_event(time(), 'daily', 'my_dailyClearOut'); 
} 
관련 문제