wp_users поиск
-
По каким колонкам BD выполняется поиск пользователей, через админку WP, в wp_users таблице.
Объясню в чем проблема:
При поиске пользователя в адмике WP по:
user_login — находит
user_nicename — не находит
user_displayname — не находитв таблице BD wp_users:
user_login — my_login
user_nicename — пусто
user_displayname — Имя фамилияЕсли руками заполнить в таблице BD wp_users:
user_nicename — Имя фамилия
То будет искать то найдет Имя или ФамилиюСделал вывод что по столбцу user_displayname не ищет.
Проблема в том что у меня что то перезатирает user_nicename
Не могу найти что.
Хотел переделать поиск на другие поля или может подскажите варианты.
-
Докопался до такого
Протестировали все версии от 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 не ищется из за этого злополучного поля.
Добавляем пользователя:
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 Иван Иванов — либо поверьте на слово — либо я могу вам анимацию\видео сделать 🙂а 3.5 — не ДО 4.1? 🙂 ОК, сейчас сделаю на 3.8.
Как и ожидалось
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не входит в этот список, потому что у этого поля нет индекса, и при большом количестве пользователей поиск может быть медленным.
Тема «wp_users поиск» закрыта для новых ответов.