WordPress social login: невозможно создать пользователя. Wordpress пожалуйста введите корректное имя пользователя
Как исправлять переводы в WordPress
Иногда возникает ситуация, когда необходимо подправить перевод в WordPress. Например, фраза «Имя пользователя», при регистрации нового пользователя, мягко говоря неинформативна. Обычный, нормальный человек, пытается туда вбить свое имя русскими буквами, но постоянно получает сообщение «ОШИБКА: Это имя пользователя некорректно, поскольку оно содержит недопустимые символы. Пожалуйста, введите корректное имя пользователя.».
При этом он начинает усиленно думать какие такие символы и почему они некорректны. Ведь никаких пояснений насчет того, какие символы корректны, а какие нет не отображается. Видимо разработчики вордпресса или переводчики на русский язык думают что любой россиянин обязан знать о водрпрессе и о том что кириллицу он не переваривает.
Если вы хотите чтобы на вашем сайте регистрировались люди, которые не знают таких слов как вордпресс, символы и прочие заумные вещи, то ситуацию нужно исправить. Иначе вместо регистраций вы получите плевки в свою сторону.
Вот на примере этой ситуации и рассмотрим алгоритм перевода. Исправим фразу на «Имя пользователя (английскими)», чтобы даже ежу было понятно что необходимо вводить.
Все переводы в вордпрессе хранятся в файлах двух типов. Это файлы .po и .mo. Расположены они в папке /wp-content/languages/
Файлы типа .po содержат строки. Вот такого вот вида:
#: wp-includes/general-template.php:411 wp-login.php:717 wp-login.php:883 msgid "Username" msgstr "Имя пользователя (английскими)"Первая строка это комментарий, поясняющий где встречается переводимая фраза. Вторая — что переводим. Третья — чем заменяем.
Но просто заменить перевод в файле .po еще недостаточно. Вордпресс не использует эти .po-файлы, потому что они большие по объему и каждый раз сканировать такой файл очень затратно по времени.
Для ускорения работы используются файлы .mo, которые представляют собой копии файла .po, но сжатые таким образом, чтобы с ними можно было быстро работать. Поэтому следующим шагом необходимо преобразовать измененный файл .po в файл типа .mo.
Сама технология .po и .mo файлов не является специфичной для вордпресса. Это давно придуманный способ хранения переводов и вордпресс просто его использует. Поэтому есть программы которые умеют работать с файлами таких типов. Вот, например, одна из них https://poedit.net/
Как с ней работать мы рассмотрим в следующей статье. А в этой я дорасскажу где хранится нужная мне фраза и как я получил .mo-файл.
Интересующую меня фразу я нашел в файле /wp-content/languages/ru_RU.po аж в 8166 строке. Исправил ее и создал файл .mo введя всего одну команду в командной строке своего хостинга:
msgfmt -o ru_RU.mo ru_RU.poТе кто знают что такое ssh, Linux, putty и прочие заумности, сразу сообразят в чем тут дело. Если же вы ничего такого не знаете, то должны понять только одно — вам нужно скачать файл .po со своего хостинга. Исправить его в программе poedit, ссылка на которую приведена выше. Создать файл типа .mo и закачать его на хостинг, заменив старый файл.
Если же вы не найдете интересующую вас строчку в файле который я указал, то не отчаивайтесь, в вордпрессе такой .po файл не один, и нужная вам фраза обязательно найдется. Конечно если она уже переведена и отображается по русски.
Если же вы хотите добавить свои переводы, то принцип тут тот же. Добавьте по вышеприведенному образцу необходимые вам строки, создайте .mo-файл и замените старый новым.
wp-plugins.ru
WordPress social login: невозможно создать пользователя
Для авторизации на сайте давно использую плагин WordPress social login. Всё вроде работало, но, как теперь выяснилось, не совсем. Глюк интересен тем, что не каждому он попадался под руки.
Часть пользователей без проблем регистрировались на сайте через социальные сети. Абсолютно все пользователи уже прошедшие регистрацию через социальные сети могли без проблем повторно авторизоваться. Как случайно выяснилось, проблема с регистрацией могла возникнуть лишь у тех, кто использует в социальной сети имя, написанное с использованием русских букв и/или спецсимволов, причём имя длинное.
Например, Facebook и Google при попытке авторизовать через себя пользователей выдавали мало о чём говорящую ошибку, связанную с невозможностью создания пользователя с пустым именем, типа:
An error occurred while creating a new user
Естественно, не сталкиваясь ранее с глюком и думая, что ранее всё работало, предполагаешь, что у социальных сетей произошли какие-то изменения, соответственно плагин перестал правильно работать.
На деле, как уже сказал, причина совсем в другом.
Чтобы поправить ситуацию необходимо воспользоваться дополнительным плагином — WordPress Special Characters in Usernames, который фильтрует имя пользователя от непригодных для использования символов. Те символы, которые можно заменить на другие — заменяются, остальные удаляются. Также удаляются лишние пробелы. Вещь нужная. Возникает лишь вопрос: почему столь необходимый и несложный в реализации функционал нельзя было добавить в сам плагин социальной авторизации? Автор плагина, похоже, просто не хочет этим заниматься, советуя пользоваться этим плагином.
Однако это не всё решение. Проблема может сохраниться для тех пользователей, у которых имена в соцсетях длинные. Чтобы иметь возможность работать с этими именами необходимо изменить параметры таблицы wp_users в базе данных. Делать это придётся руками, например, через phpMyAdmin:
Увеличиваем размеры полей user_login и user_nicename. Я сделал значения в 255 знаков, хотя это и довольно много для имён.
d1mon.com
Используем e-mail вместо имени пользователя для входа в WordPress
Блог / WordPress / Используем e-mail вместо имени пользователя для входа на сайтВо-первых, я хочу извиниться, что почти три недели (!) ничего не писал на блоге, просто сейчас очень много дел навалилось, обещаю, что вскоре снова начну публиковать посты регулярно.
А теперь к делу. Приведу в пример сайт deviantart.com, взгляните на их форму входа пользователей. Как видите, они предлагают ввести либо логин либо e-mail, прикольно.
Реализовать это на WorPress на самом деле проще простого, достаточно вставить этот кусок кода в fucntions.php текущей темы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // удаляем стандартный фильтр remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 ); // и добавляем собственный add_filter( 'authenticate', 'login_by_email', 20, 3 ); function login_by_email( $user, $username, $password ) { // если введен логин, то сразу авторизуем, минуя лишние запросы if ( is_email( $username ) ) { // получаем ID пользователя if ( ! empty( $username ) ) $user = get_user_by( 'email', $username ); // подбираем соответствующее емейлу имя пользователя (логин) if ( isset( $user->user_login, $user ) ) $username = $user->user_login; } return wp_authenticate_username_password( NULL, $username, $password ); } |
Теперь смотрите, код выше позволяет пользователям входить на сайт вписывая и логин и e-mail. А что если дать им возможность входа только при помощи e-mail, а при помощи имени пользователя — запретить?
Немного видоизменяем функцию:
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function login_by_email( $user, $username, $password ) { // если введен логин, то отправляем лесом if ( !is_email( $username ) ) return; // получаем ID пользователя if ( ! empty( $username ) ) $user = get_user_by( 'email', $username ); // подбираем соответствующее емейлу имя пользователя (логин) if ( isset( $user->user_login, $user ) ) $username = $user->user_login; return wp_authenticate_username_password( NULL, $username, $password ); } |
Теперь, если какой-нибудь чувак захочет войти и при этом введет имя пользователя, а не email, то он наткнется на сообщение об ошибке.
Смотрите также
misha.blog