public static function shortcode_dabory_members($attrs, $content)
 {
     $param = wskl_get_from_assoc($attrs, 0);
     $output = '';
     switch ($param) {
         case 'withdrawal':
             if (wskl_is_option_enabled('members_enable_withdrawal_shortcode')) {
                 $output = WSKL_Dabory_Members_Withdrawal::output_form($content);
             }
             break;
         default:
             _doing_it_wrong(__FUNCTION__, "parameter '{$param}' is not recognized.", WSKL_VERSION);
     }
     return $output;
 }
        $user = wp_get_current_user();
        $password = wskl_POST('password');
        $reason = wskl_POST('reason', 'sanitize_text_field');
        self::evaluate_and_redirect_if_failed(wp_check_password($password, $user->user_pass, $user->ID), __('비밀번호가 일치하지 않습니다.', 'wskl'));
        if (wskl_is_option_enabled('members_delete_after_withdrawal')) {
            if (!function_exists('wp_delete_user')) {
                include_once ABSPATH . 'wp-admin/includes/user.php';
            }
            // 멤버 정말로 삭제
            wp_logout();
            wp_delete_user($user->ID);
        } else {
            // 역할을 바꿔 탈퇴 회원으로 간주
            update_user_meta($user->ID, 'withdrawal_reason', $reason);
            $user->set_role('wskl_withdrawn');
            wp_logout();
        }
        // 탈퇴 완료 메시지
        wp_redirect(add_query_arg(array('status' => 'complete'), $_SERVER['REQUEST_URI']));
        exit;
    }
    private static function evaluate_and_redirect_if_failed($expr, $message)
    {
        if (!$expr) {
            wp_redirect(add_query_arg(array('status' => 'failure', 'message' => urlencode($message)), $_SERVER['REQUEST_URI']));
            exit;
        }
    }
}
WSKL_Dabory_Members_Withdrawal::init();