¿Cómo usar múltiples bases de datos en WordPress?
Quiero obtener algunas entradas de otro sitio WordPress que está alojado en el mismo servidor. ¿Cómo puedo obtener esas entradas?
¿Es posible tener múltiples conexiones de base de datos en WordPress?
Sí, es posible usar múltiples bases de datos en WordPress. Aquí hay algunas formas de hacerlo:
1. Usando una segunda conexión en functions.php
// Crear una segunda conexión a la base de datos
function get_db2() {
static $db;
if (!isset($db)) {
$db = new wpdb('usuario2', 'contraseña2', 'nombre_db2', 'localhost');
}
return $db;
}
// Ejemplo de uso
function get_posts_from_other_site() {
$db2 = get_db2();
$prefix = 'wp_'; // prefijo de la otra base de datos
$posts = $db2->get_results("
SELECT * FROM {$prefix}posts
WHERE post_type = 'post'
AND post_status = 'publish'
LIMIT 10
");
return $posts;
}
2. Usando el archivo wp-config.php
// Definir constantes para la segunda base de datos
define('DB2_NAME', 'nombre_segunda_db');
define('DB2_USER', 'usuario_db2');
define('DB2_PASSWORD', 'contraseña_db2');
define('DB2_HOST', 'localhost');
// Crear la conexión cuando sea necesaria
global $wpdb2;
$wpdb2 = new wpdb(DB2_USER, DB2_PASSWORD, DB2_NAME, DB2_HOST);
También puedes considerar estas alternativas:
- Usar la API REST de WordPress si el otro sitio la tiene habilitada
- Implementar una conexión entre sitios usando WordPress Multisite
- Utilizar tablas personalizadas en la misma base de datos
Recuerda siempre manejar las conexiones de base de datos de forma segura y cerrarlas cuando no se necesiten para evitar problemas de rendimiento.

Es posible pero debes crear manualmente una nueva instancia de la clase wpdb
con la configuración correcta para tu otra base de datos.
Cita de la página del Codex sobre wpdb:
El objeto $wpdb puede comunicarse con cualquier número de tablas, pero solo con una base de datos: la base de datos de WordPress. En el raro caso de que necesites conectarte a otra base de datos, tendrás que instanciar tu propio objeto de la clase wpdb con los detalles de conexión apropiados. Para configuraciones extremadamente complicadas con muchas bases de datos, considera usar hyperdb en su lugar.

Puedes usar HyperDB: https://wordpress.org/plugins/hyperdb/ Permite múltiples bases de datos, también réplicas de lectura/escritura o configuraciones maestro/esclavo.

1) Descargar la clase db en el enlace: https://codeshack.io/super-fast-php-mysql-database-class/ - renombrar class db = db_custom
2) .../themes/nombre-del-tema/functions.php
$dbhost = 'db_ip'; // 127.0.0.1 $dbuser = 'db_user'; // ingresar nombre de usuario de la base de datos $dbpass = 'db_user_password'; // ingresar tu contraseña de base de datos $dbname = 'db_user_name'; // ingresar el nombre de tu base de datos
$db_watch = new db_custom($dbhost, $dbuser, $dbpass, $dbname); $sql = "SELECT * FROM products LIMIT 0,2"; $results = $db_watch->query($sql)->fetchAll(); print_r($results);
He probado mi sitio WordPress y funciona correctamente
