Авторизация в WordPress с использованием данных из внешней базы данных
У меня есть сайт на WordPress и внешняя база данных (не из WordPress) с пользователями. Процесс добавления записей в эту таблицу использует тот же алгоритм, что и WordPress. Мне нужно реализовать вход в WordPress, но с проверкой данных из этой внешней базы, которая, кстати, находится на том же хосте. Я изучил эти ссылки http://www.tyssendesign.com.au/articles/cms/connecting-to-external-database-from-within-wordpress/ и http://wordpress.org/extend/plugins/external-database-authentication/, но первый вариант не подходит, а второй не совместим с WordPress 3+, а я использую версию 3.3.1. Есть ли какие-то предложения, документация или другие решения?

Вы можете переопределить основную функцию wp_authenticate.
Для этого необходимо создать собственный плагин и объявить новую версию wp_authenticate. Функция принимает имя пользователя и пароль, а возвращает объект WP $user.
wp_authenticate является "подключаемой" функцией (pluggable) и находится в файле wp-includes/pluggable.php.

Будет ли эта функция работать в файле functions.php моей темы? И как подключиться к внешней базе данных для проверки имени пользователя и пароля?

Функция должна находиться в плагине, она не будет работать в functions.php (это связано с тем, как подключаемые функции загружаются в WordPress).

Вы можете использовать PHP-функции mysql/mysqli для подключения к базе данных и проверки имени пользователя и пароля. Подключение к БД будет стандартным для PHP. Однако важно понимать процессы хеширования и солирования паролей, чтобы обеспечить лучшие практики хранения паролей.

Мне нужно было больше возможностей, чем я мог найти в других решениях, поэтому я написал собственный плагин — External Login.
Основные функции плагина:
- Сопоставление структуры сторонней таблицы базы данных с полями WordPress
- Поддержка различных методов хеширования из внешней базы данных (bcrypt, MD 2 4 и 5, SHA 256 384 и 512, и многие другие)
- Возможность использования различных методов соления
- Создание копии пользователя в базе данных WordPress для работы с стандартными функциями WordPress, такими как роли и права
- Сопоставление ролей из внешней базы данных с ролями WordPress (например, студент во внешней базе становится редактором в WordPress)
Дайте знать, если вам нужна дополнительная функциональность :)

Вы пробовали плагин External Database Authentication? Тот факт, что он давно не обновлялся, не обязательно означает, что он не будет работать. Как минимум, вы можете изучить его исходный код, чтобы понять, как реализована функциональность, и использовать это в качестве основы для своей задачи.
Вот код: http://plugins.trac.wordpress.org/browser/external-database-authentication/trunk/ext_db_auth.php

Я только что обновил этот старый плагин под свои нужды. Обновленную версию можно найти @ http://www.7mediaws.org/extend/plugins/external-db-auth-reloaded

Да, ваш плагин просто отличный. Единственное, что нужно доработать и завершить, это поддержку двух разных таблиц в новых версиях WordPress, которые содержат данные пользователей. Это таблицы wp_user и wp_usermeta. В плагине же предусмотрена аутентификация только по одной таблице. Если эту функцию исправить, ваш плагин точно станет на 100% успешным.
Ещё есть баг. Поскольку для аутентификации используется только одна таблица, я не могу проверить роли пользователей и синхронизировать их. Это означает, что при включении внешнего входа, когда я выхожу и вхожу снова, у меня назначается роль подписчика, которую я указал на случай, если роли не совпадают. Таким образом, я также теряю права администратора. Пожалуйста, помогите и разберитесь с этим.
