Iniciar sesión en WordPress usando datos de una base de datos externa
Tengo un sitio en WP y también una base de datos externa (que no es la de WP) con usuarios. El proceso de inserción en esa tabla utiliza el mismo algoritmo que usa WP. Lo que necesito hacer es iniciar sesión en WP pero usando esta base de datos externa que, por cierto, está en el mismo host. He revisado estos enlaces http://www.tyssendesign.com.au/articles/cms/connecting-to-external-database-from-within-wordpress/ y http://wordpress.org/extend/plugins/external-database-authentication/ y el primero no es lo que quiero, mientras que el segundo no es compatible con WP 3+ y estoy usando la versión 3.3.1, ¿alguna sugerencia, documentación o algo más?

Puedes sobrescribir la función principal wp_authenticate.
Necesitarías crear un plugin personalizado y declarar una nueva versión de wp_authenticate. La función acepta un nombre de usuario y una contraseña, y devuelve un objeto $user de WordPress.
wp_authenticate es una función 'pluggable' y se encuentra en el archivo wp-includes/pluggable.php.

¿Puede esta función funcionar en functions.php en mi tema? Además, ¿cómo conectarse a una base de datos externa y verificar allí el nombre de usuario y contraseña?

La función debe estar en un plugin, no funcionará en functions.php (tiene que ver con cómo se cargan las funciones plugables en WP).

Podrías usar las funciones mysql/mysqli de php para conectarte a la base de datos y validar el nombre de usuario y contraseña, la conexión a la base de datos sería simplemente el uso estándar de bases de datos en php. Sin embargo, sería bueno entender los procesos de hashing/salting de contraseñas para garantizar las mejores prácticas en el almacenamiento de contraseñas.

Necesitaba más funciones de las que podía encontrar en otros lugares, así que escribí mi propio plugin: External Login.
Tiene estas características principales:
- Mapear una estructura de tabla de base de datos diferente para que sea compatible con los campos de WordPress
- Manejar diferentes métodos de hash de tu base de datos externa (bcrypt, MD 2 4 y 5, SHA 256 384 y 512, y muchos más)
- Permitir diferentes métodos de salado
- Generar una versión copiada del usuario en la base de datos para que puedas seguir utilizando las funciones comunes de WordPress con usuarios y roles
- Mapear roles desde tu "base de datos externa" a los que se encuentran en WordPress, por ejemplo, un estudiante en la "base de datos externa" se convierte en un editor en la base de datos de WordPress.
Házme saber si necesitas alguna otra función :)

¿Has probado el plugin External Database Authentication? Solo porque no se haya actualizado en un tiempo no significa que necesariamente no funcione. Al menos puedes revisar su código fuente para ver cómo implementaron lo que hicieron y usarlo como base para lograr lo que necesitas.
Aquí está el código http://plugins.trac.wordpress.org/browser/external-database-authentication/trunk/ext_db_auth.php

Acabo de actualizar ese viejo plugin para mis necesidades. Puedes encontrar la actualización en http://www.7mediaws.org/extend/plugins/external-db-auth-reloaded

Sí, tu plugin es increíble. Lo único que necesitas mejorar y finalizar en tu plugin es que, en versiones más recientes de WordPress, hay dos tablas diferentes que contienen datos de usuarios. Estas son wp_user y wp_usermeta. Y en el plugin, solo se proporciona una tabla para autenticar. Así que si esta característica funciona correctamente, definitivamente tu plugin será 100% exitoso.
Además, hay un error. Como solo hay una tabla para autenticar, no pude autenticar los roles de usuario y sincronizarlos. Esto significa que cuando habilito el inicio de sesión externo, al cerrar sesión y volver a iniciar sesión, tengo el rol de suscriptor, que he especificado si no hay coincidencia de roles. Así que también perdí mi condición de administrador. Por favor, ayuda y comprende.
