Докопался до такого
Протестировали все версии от 3.9 до 4.1.1
Эта проблема появляется в 4.1 (как раз добавили интеграцию языков в дистрибутив)
При добавлении пользователя средствами WP (добавить вручную или при регистрации)
Добавляем пользователя:
i.ivanov
Иван
Иванов
ivanov@ivan.ov
В БД wp_users
ДО 4.1
user_nicename — Иван Иванов
ПОСЛЕ 4.1
user_nicename — i-ivanov
После 4.1 по фамилии Иванов функция поиска не отрабатывает — так как ищется по полю user_nicename — а оно уже на латинице.
Вопрос — как искать теперь по имени или фамилии
Как-то так:
function fufufu( $search_columns ) {
//по щучьему веленью, по моему хотенью, хочу искать во всех полях! :DD
$search_columns = array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename', 'display_name' );
return $search_columns;
}
add_filter( 'user_search_columns', 'fufufu' );
Где-нибудь внизу functions.php
активной темы оформления добавьте или плагин свой соорудите. Если через тему, то лучше дочернюю делайте http://codex.wordpress.org/Дочерние_темы
Окей, это безусловно выход с моей проблемы,спасибо, но что никого не волнует что с 4.1 не работает корректно поиск пользователей стандартными средствами?
Пардон он работает — но не так как раньше.
Я оставлю реплику на уровне логических размышлений. Если в поле user_nicename
использовали «санитара» для трансляции в латиницу, то это, скорее всего, по соображениям безопасности. Иных, приятных разуму, оснований я не вижу.
никого не волнует что с 4.1 не работает корректно поиск
Видимо, редко кто использует блог для всех кто «умеет печатать» (monkey typing). Обычно блог состоит из одного, двух, авторов. Кого там искать-то? :DD
офтоп
Если вам это очень интересно, то смотрите исходный код. А может действительно это серьёзный баг и разработчики упустили его из виду? Напишите тикет и будете ждать как я. Уже два месяца https://core.trac.wordpress.org/ticket/30883 🙂 — причина моей регистрации здесь….
Больно оно нужно было 😛
Хотя, наверное, с десяток блогеров благодарны мне за подсказки.. А что, подсказка в пару строчек кода меня не отяготит… 2мес это 60дней/10блогеров — это 6 дней на блогера. Я крут! И чай с лимоном у меня всегда свежий! 😛
У меня к примеру на WP корпоративный портал, 300 пользователей. К пользователям привязаны роли\группы.
То найти кому фоточки добавить, роль сменить, информации по должности обновить.
В общем поиск мне нужен был.
Я не гуру в этих делах — но в чем проблема хватило думалки разобраться.
TempAcc — спасибо Вам за подсказку.
Тикет таки напишу…
user_login — my_login
user_nicename — пусто
user_displayname — Имя фамилия
Если руками заполнить в таблице BD wp_users:
user_nicename — Имя фамилия
То будет искать то найдет Имя или Фамилию
…
ДО 4.1
user_nicename — Иван Иванов
ПОСЛЕ 4.1
user_nicename — i-ivanov
Поле user_nicename
используется в URL архивов автора. Оно получается из поля user_login
путём применения функции sanitize_title()
и содержит только символы, допустимые в URL. Заполнять его вручную не нужно.
Так было и до 4.1, и после.
Если у вас это поле пустое или в нём содержатся символы кириллицы — скорее всего, используется какой-то плагин для изменения процедуры регистрации.
Единственное изменение в 4.1, которое могло повлиять на данную ситуацию, — [29819].
Ранее, если при создании пользователя плагином в функцию wp_insert_user()
передавался параметр user_nicename
, он использовался как есть, и это могло привести к неработоспособным ссылкам.
Сейчас из него удаляются символы, недопустимые в URL, как и при автоматическом заполнении поля.
Так было и до 4.1, и после.
В ручную я заполнил для теста.
Я сегодня переставил все версии от 3.8 до 4.1.1
Каждый раз ставился голый WP. На чистую базу. Без плагинов.
Создавался пользователь через админку WP
Транслитироваться user_nicename начал с 4.1.
До 4.1 поле заполнялось кириллицей самим WP
И искался пользователь по имени\фамилии.
С 4.1 не ищется из за этого злополучного поля.
Модератор
Юрій
(@yube)
Добавляем пользователя:
i.ivanov
Иван
Иванов
ivanov@ivan.ov
В БД wp_users
ДО 4.1
user_nicename — Иван Иванов
Только что проверил на WP 3.5.2
user_nicename — i-ivanov
И нифига «Иван» не ищется.
Что я делаю не так?
http://joxi.ru/p27g43wF5YE327
Я не могу сказать про 3.5.2
на 3.8 Иван Иванов — либо поверьте на слово — либо я могу вам анимацию\видео сделать 🙂
Модератор
Юрій
(@yube)
а 3.5 — не ДО 4.1? 🙂 ОК, сейчас сделаю на 3.8.
Модератор
Юрій
(@yube)
Как и ожидалось
i.ivanov => i-ivanov
Ибо неоткуда взяться другому.
if ( empty($user_nicename) )
$user_nicename = sanitize_title( $user_login );
Я не знаю что сказать, поставил 3.8 3.9
получил тот же результат что у Вас. Что за хрень я не понимаю.
Транслитироваться user_nicename начал с 4.1.
До 4.1 поле заполнялось кириллицей самим WP
Нет, это не так. Поле формируется на основе user_login
, а не display_name
. Символы кириллицы в логине по умолчанию недопустимы, поэтому и в user_nicename
им взяться неоткуда.
Даже если поставить плагин Allow Cyrillic Usernames, в user_nicename
всё равно попадает не кириллица, а закодированный вариант %d0%b8%d0%b2%d0%b0%d0%bd-%d0%b8%d0%b2%d0%b0%d0%bd%
, допустимый в URL.
Наиболее правильное решение проблемы поиска по отображаемому имени — добавить display_name
в список полей для поиска с помощью фильтра user_search_columns, как подсказал TempAcc.
По умолчанию display_name
не входит в этот список, потому что у этого поля нет индекса, и при большом количестве пользователей поиск может быть медленным.