';
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');
}
}