워드프레스 WP-Members 플러그인 회원 탈퇴 기능

WP-Members는 워드프레스에서 회원제 사이트를 운영하려는 경우에 사용할 수 있는 무료 멤버십 플러그인입니다. 워드프레스에는 기본적인 회원 가입 기능이 있지만 Ultimate Member나 WP-Members와 같은 멤버십 플러그인을 사용하여 정교한 회원제 사이트 운영이 가능합니다.

우커머스 회원제 사이트를 운영하려는 경우에는 YITH WOOCOMMERCE MEMBERSHIP과 같은 우커머스용 멤버십 플러그인을 사용할 수 있습니다.

워드프레스 WP-Members 플러그인 회원 탈퇴 기능 추가하기

워드프레스 WP-Members 플러그인 회원 탈퇴 기능

WP-Members는 현재 80,000개가 넘는 사이트에 설치되어 사용되고 있으며, Ultimate Member는 이보다 많은 20만 개 이상의 사이트에서 사용되고 있습니다.

워드프레스 사이트에서 회원 가입이 불필요한 경우에는 회원 가입을 비활성화할 수 있습니다.

워드프레스에서는 회원 탈퇴 기능은 제공하지 않습니다. 회원들이 탈퇴할 수 있도록 하려는 경우 Delete Me와 같은 플러그인을 사용할 수 있습니다. 하지만 이 플러그인의 사용자가 많지 않아서 그런지 몰라도 현재 1년 이상 업데이트가 안 되고 있습니다. 이 때문에 최신 워드프레스 버전에서 잘 작동할지는 장담할 수 없습니다.

WP-Members 플러그인을 사용하는 경우에는 다음 코드를 추가하면 사용자들이 자신의 계정을 삭제하여 탈퇴하도록 허용할 수 있습니다.

/**
 * User self delete script. 사용자가 자신 계정을 삭제하도록 하는 스크립트.
 * 
 * This adds a "delete my account" link to the user profile links
 * created with the [wpmem_profile] shortcode. The user selects and
 * confirms to delete their account and is presented with a success
 * message when the account is deleted.
 * 이 코드를 사용하면 [wpmem_profile] 숏코드로 생성된 사용자 프로필 링크에 "delete my account" 링크를 추가합니다.
 * 사용자가 자신의 계정을 선택하고 삭제를 확인하면 계정이 삭제되면서 성공 메시지가 표시됩니다.
 */


// Add below this line to functions.php


/**
 * Checks to see if a user is self deleting and if so, after
 * verifying the nonce and form post fields for validity, 
 * the user is deleted.
 */
add_action( 'wpmem_after_init', 'my_user_self_delete' );
function my_user_self_delete () {
    // Verify that the user intended to take this action.
    if ( isset( $_POST['self_delete'] ) && 'delete' == $_POST['self_delete'] ) {
        $nonce = ( isset( $_REQUEST['_wpnonce'] ) ) ? $_REQUEST['_wpnonce'] : false;
        if ( ! wp_verify_nonce( $nonce, 'wpmem_self_delete' ) ) {
            return;
        }
        require_once( ABSPATH . 'wp-admin/includes/user.php' );
        $current_user = wp_get_current_user();
        $wpmem_self_delete = array(
            'self_delete' => 'complete',
            'username' => $current_user->user_login,
        );
        wp_delete_user( $current_user->ID );
        wp_redirect( add_query_arg( $wpmem_self_delete, wpmem_profile_url() ) );
        exit();
    }
}

/**
 * If a user deleted their account, display a success message. 사용자가 계정을 삭제하면 성공 메시지가 표시됩니다.
 */
add_filter( 'the_content', 'my_user_self_delete_msg', 999 );
function my_user_self_delete_msg($content){

    if ( isset( $_GET['self_delete'] ) && 'complete' == $_GET['self_delete'] ) {
        $content = wpmem_inc_regmessage( 'self_delete', 'Account deleted for: ' . sanitize_user( $_GET['username'] ) ) . $content;
    }
    return $content;
}


/**
 * This is the member links framework. This adds the user delete
 * link to the member links.  If that action is selected, this
 * displays the form button to validate user deletion.
 */
add_filter( 'wpmem_member_links', 'my_custom_member_links' );
function my_custom_member_links( $links ) {
    
    // Settings.
    $link_text   = 'Delete My Account';
    $return_text = 'Return to User Settings';
    
    /*
     * You probably don't need to change anything below here.
     */
    $process_name = 'delete_my_account'; 
    $return_link  = remove_query_arg( 'a' );
    $return_link  = sprintf( '<p><a href="%s">%s</a></p>', esc_url( $return_link ), $return_text );
    
    // If the page is the custom process page, build and display the form.
    if ( ( isset( $_REQUEST['a'] ) && $process_name == $_REQUEST['a'] ) ) {

        $content = '<p>Do you really want to delete your account?<br />This action is permanent and cannot be undone!</p>
            <p><form name="form" method="post" action="' . esc_url( wpmem_profile_url() ) . '">'
                . wp_nonce_field( 'wpmem_self_delete' )
                . '<input type="hidden" name="self_delete" value="delete" />'
                . '<input type="submit" name="submit" id="submit" class="button button-primary" value="' . $link_text . '"  />'
                . '</form></p>';
        
        // Add a return button.
        $links = $content . $return_link;

    } else {

        $link = add_query_arg( 'a', $process_name, wpmem_profile_url() );
        $new_link = '<li><a href="' . esc_url( $link ) . '">' . $link_text . '</a></li>';
        
        // Add new link at the end of the existing list.
        $links = str_replace( '</ul>', $new_link . '</ul>', $links );
        
    }
    
    return $links;
  }

위의 코드는 WP-Members 사이트의 “Allow Users to Delete Account (with confirmation message)“라는 글에 제시된 코드입니다. 2017년에 작성된 코드이기 때문에 최신 WP-Members 버전에서 잘 작동할지는 모르겠습니다. 예상대로 작동하지 않으면 WP-Members에 문의하여 상기 코드를 어떻게 수정하면 되는지 체크해볼 수 있을 것입니다.

상기 코드는 FTP에 접속하여 현재 사용 중인 테마의 함수 파일에 추가하시기 바랍니다. 차일드 테마를 만들어 작업하는 것이 좋습니다. FTP 접속 방법은 이용하는 웹호스팅 업체에 문의하시면 상세한 안내를 받을 수 있을 것입니다. 블루호스트와 같이 cPanel을 제공하는 호스팅에서는 cPanel에서 FTP 계정을 신규로 만들어 접속하는 것도 가능합니다(“해외호스팅 블루호스트 FTP 사용하기 (계정 생성 및 파일질라 설정)” 참고).

위의 코드가 제대로 작동하는지 체크해보시고, 잘 안 된다면 (사용 중인 워드프레스 버전, PHP 버전, WP-Members 버전 등의 정보와 함께) 아래 댓글을 통해 알려주시기 바랍니다. 그러면 시간이 될 때 WP-Members에 문의해보겠습니다.

마치며

이상으로 WP-Members 플러그인을 사용하는 경우 회원 탈퇴 기능을 추가하는 방법에 대하여 살펴보았습니다.

회원제 관련 서비스를 제공하는 경우 WP-Members나 UM 같은 플러그인을 사용할 수 있습니다. 하지만 일반적인 사이트에서는 회원 가입 기능 자체를 비활성화하여 사용자들이 가입을 하지 못하도록 차단하는 것을 고려해볼 수 있습니다.

2 thoughts on “워드프레스 WP-Members 플러그인 회원 탈퇴 기능”

    • 김철진님, 블로그를 방문해주셔서 감사합니다. 댓글이 스팸으로 인식되어 이제 확인했습니다. 워드프레스 정보꾸러미 블로그와 함께 운영하고 있습니다. 시간이 부족하여 이 블로그는 방치되고 있습니다. 시간이 날 때 이 블로그에도 글을 올려보도록 노력하겠습니다.

      응답

Leave a Comment