'; echo $html; } else { $current_user = wp_get_current_user(); $html = "

Hello, " . esc_html($current_user->display_name) . "!

"; $html .= "

Log out

"; echo $html; } } // Обработчик авторизации через Telegram add_action('wp_ajax_ontelegramauth', 'onTelegramAuth'); add_action('wp_ajax_nopriv_ontelegramauth', 'onTelegramAuth'); function onTelegramAuth() { // Получаем данные от Telegram $auth_data = [ 'id' => sanitize_text_field($_POST['id']), 'first_name' => sanitize_text_field($_POST['first_name']), 'last_name' => sanitize_text_field($_POST['last_name']), 'username' => sanitize_text_field($_POST['username'] ?? ''), 'photo_url' => sanitize_text_field($_POST['photo_url'] ?? '') ]; if (!$auth_data['id']) { wp_die(json_encode(['status' => 'error', 'message' => 'Invalid Telegram data'])); } // Проверяем существование пользователя по tg_account $users = get_users([ 'meta_key' => 'tg_account', 'meta_value' => $auth_data['id'], 'number' => 1 ]); $password = wp_generate_password(12, true, false); // Генерация безопасного пароля if ($users) { // Существующий пользователь $user = $users[0]; wp_set_password($password, $user->ID); $login = wp_signon([ 'user_login' => $user->user_login, 'user_password' => $password, 'remember' => true ]); if (!is_wp_error($login)) { session_start(); $_SESSION['tg_user'] = $auth_data; session_write_close(); wp_die(json_encode(['status' => 'success', 'redirect' => admin_url()])); } } else { // Новый пользователь $username = sanitize_user($auth_data['username'] ?: $auth_data['first_name'] . '_' . $auth_data['last_name'], true); $username = wp_slash($username); // Экранируем для безопасности $user_id = wp_create_user($username, $password, $username . '@telegram.com'); if (!is_wp_error($user_id)) { wp_update_user([ 'ID' => $user_id, 'display_name' => $auth_data['first_name'] . ' ' . $auth_data['last_name'], 'first_name' => $auth_data['first_name'], 'last_name' => $auth_data['last_name'] ]); add_user_meta($user_id, 'tg_account', $auth_data['id']); add_user_meta($user_id, 'tg_username', $auth_data['username']); $login = wp_signon([ 'user_login' => $username, 'user_password' => $password, 'remember' => true ]); if (!is_wp_error($login)) { session_start(); $_SESSION['tg_user'] = $auth_data; session_write_close(); wp_die(json_encode(['status' => 'success', 'redirect' => admin_url()])); } } } wp_die(json_encode(['status' => 'error', 'message' => 'Login failed'])); } // Функция привязки Telegram к существующему пользователю add_action('wp_ajax_linktelegram', 'linkTelegram'); add_action('wp_ajax_nopriv_linktelegram', 'linkTelegram'); function linkTelegram() { if (!is_user_logged_in()) { wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in'])); } $tg_id = sanitize_text_field($_POST['userid']); $user_id = get_current_user_id(); add_user_meta($user_id, 'tg_account', $tg_id); wp_update_user([ 'ID' => $user_id, 'first_name' => sanitize_text_field($_POST['fname']), 'last_name' => sanitize_text_field($_POST['lname']) ]); wp_die(json_encode(['status' => 'success'])); } // Функция обновления email add_action('wp_ajax_email_link', 'emailLink'); add_action('wp_ajax_nopriv_email_link', 'emailLink'); function emailLink() { if (!is_user_logged_in()) { wp_die(json_encode(['status' => 'error', 'message' => 'Not logged in'])); } $email = sanitize_email($_POST['email']); $user_id = get_current_user_id(); if (email_exists($email)) { wp_die(json_encode(['status' => 'error', 'message' => 'Email is already registered'])); } wp_update_user(['ID' => $user_id, 'user_email' => $email]); wp_die(json_encode(['status' => 'success'])); } // Добавление и настройка колонки Telegram add_filter('manage_users_columns', 'add_tg_account_column'); function add_tg_account_column($columns) { $columns['tg_username'] = 'Telegram'; return $columns; } add_action('manage_users_custom_column', 'add_tg_account_column_content', 10, 3); function add_tg_account_column_content($value, $column_name, $user_id) { if ('tg_username' == $column_name) { $tg_username = get_user_meta($user_id, 'tg_username', true); return $tg_username ? '@' . esc_html($tg_username) . '' : 'не указан'; } return $value; } add_filter('manage_users_sortable_columns', 'make_tg_account_column_sortable'); function make_tg_account_column_sortable($columns) { $columns['tg_username'] = 'tg_username'; return $columns; } add_action('pre_get_users', 'handle_tg_account_sorting'); function handle_tg_account_sorting($query) { if (!is_admin() || !$query->is_main_query()) return; if ('tg_username' === $query->get('orderby')) { $query->set('meta_key', 'tg_username'); $query->set('orderby', 'meta_value'); } }