Проблема, оказывается, не там, где я копал…
На данный момент закомментировал весь код, который ограничивает доступ к админке. При попытке доступа не-админом к wp-admin (или после логина не-админа) получаю ответ:
You do not have sufficient permissions to access this page.
и Фаербаг в консоль пишет 500 ошибку. Путем гугления было установлено, что ошибку генерирует сам ВП после проверки прав пользователя и отображения страницы (нативные 500 ошибки сервера не так выглядят).
Также было нагуглено, что проблема возможна с ролями не-админов. Всех пользователей я зарегистрировал скриптом при помощи функции
wp_insert_user()
но при этом параметр role
оставил пустым, понадеявшись, что ВП подставит дефолтное значение — итого имею около 140 пользователей, с которыми ВП не знает как работать, потому что им не присвоен role
.
Сейчас попробую удалить всех пользователей и зарегистрировать их заново уже с нормальными данными.
Если я копаю не в ту сторону — лучше остановите меня сейчас, пока я не влез в дебри 🙂
Запретить всем входить, кроме админа, но оставить доступными скрипты, стили и тп?
или
Редиректить на главную после логина, но не запрещено входить после?
1)В админку нельзя никому входить, кроме админа(админов).
2)Все скрипты должны работать (аякс и прочее)
3)Также нужно не-админов при обращении к /wp-admin
редиректить на главную. Им даже профиль свой смотреть нельзя.
Вот решение, но у меня оно не работает, потому что я неправильно зарегистрировал пользователей — я им не присвоил параметр role
. Сам ВП тоже не присвоил значение по умолчанию. Когда смотришь в админской части пользователей, то ихняя роль отображается как None
, и БД там тоже пусто. Думаю, что проблема в этом…
Да, я оказался прав.
Удалил всех пользователей, зарегистрировал повторно и явно указал роль — все заработало как и должно было.
Остается вопрос — почему ВП сам не подставил роль по умолчанию?
В документации к wp_insert_user()
это описано, в коде функции проверка на этот счет есть…
Но это уже другая история.
Всем спасибо.
Возможно.
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_Control_with_redirect
При добавлении чего-то похожего в файл функций темы — оно даже не срабатывало, ставил там die(var_dump('dump here'))
не срабатывало, вылетало еще раньше.
Остается вопрос — почему ВП сам не подставил роль по умолчанию?
Если код не модифицирован, то вряд ли такое могло произойти http://core.trac.wordpress.org/browser/tags/3.6.1/wp-includes/user.php#L1409
Дефолтная роль берется из БД.
При добавлении чего-то похожего в файл функций темы — оно даже не срабатывало,
Проверил, у меня работает.
тут есть маленький ньюанс 🙂 при создании массива $userdata
параметр я указал вот так
'role' => ''
В коде — просто проверка на isset()
— итого получили, что после extract()
переменная есть, но она пустая.
Думаю все было так 🙂
Проверил, у меня работает.
Сейчас и у меня работает, когда роли явно прописаны, а не пусто там) Я предполагаю, что при отсутствии у пользователя роли (именно пусто в этом поле) ВП закрывает доступ еще до того, как подгрузятся функции темы.