WordPress Multisite : Jongler avec les bases de données grâce à set_blog_id()
Hey ! Aujourd’hui on va parler d’une fonction un peu méconnue mais super pratique dans WordPress Multisite : set_blog_id(). C’est un peu comme avoir une télécommande qui permet de zapper entre différentes bases de données. Sympa, non ? 😎
C’est quoi le truc ?
Imagine que tu gères plusieurs sites WordPress dans une installation Multisite. Chaque site a ses propres tables dans la base de données avec un préfixe unique. set_blog_id() te permet de dire « je veux travailler avec les données de ce site spécifique ».
Comment ça marche concrètement ?
// On récupère notre objet base de données global $wpdb; // On note d'où on part (toujours garder ses repères !) // Hop, on zappe sur le site 2 $old_blog_id = $wpdb->set_blog_id(2); // Maintenant on peut faire nos requêtes sur le site 2 $posts = $wpdb->get_results("SELECT * FROM {$wpdb->posts}"); // Et on revient à la maison $wpdb->set_blog_id($old_blog_id);
Qu’est-ce qui change quand on « zappe » ?
Quand tu utilises set_blog_id(), WordPress met automatiquement à jour :
- Les préfixes des tables (comme wp_2_ au lieu de wp_)
- Les noms des tables ($wpdb->posts pointe vers la bonne table)
- L’identifiant du site actif
C’est un peu comme si tu changeais de chaîne sur ta TV : tout le contexte change d’un coup !
Les pièges à éviter
- Ne pas oublier de rentrer à la maison : Toujours revenir au site initial
- Attention aux effets de bord : La fonction ne gère que la BDD
- Pas de panique : Utilise try/catch pour gérer les erreurs proprement
La solution plus simple (mais pas toujours meilleure)
En vrai, pour 90% des cas, tu vas utiliser switch_to_blog(). C’est un peu la solution « tout-en-un ».
switch_to_blog(2); // Fais tes trucs tranquille restore_current_blog();
C’est simple, mais c’est comme utiliser un marteau-piqueur pour planter un clou ! 😅
Pourquoi faire simple quand c’est pas toujours pertinent ?
switch_to_blog() va :
- Changer le contexte de base de données
- Réinitialiser tous les caches
- Recharger les capacités utilisateur
- Switcher les options du site
- Modifier les chemins d’upload
- Et bien d’autres choses encore…
C’est comme si tu déplaçais toute ta voiture juste pour ouvrir une vitre ! Parfois, c’est justement ce dont tu as besoin. Mais quand tu veux juste accéder à quelques données d’un autre site, set_blog_id() est bien plus chirurgical et performant.
Exemple concret :
// Avec switch_to_blog() - Déplace toute la voiture switch_to_blog(2); $site_name = get_option('blogname'); restore_current_blog(); // Avec set_blog_id() - Ouvre juste la vitre global $wpdb; $old_blog_id = $wpdb->set_blog_id(2); $site_name = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'blogname'"); $wpdb->set_blog_id($old_blog_id);
La deuxième approche est plus technique mais bien plus efficace quand tu sais exactement ce que tu veux faire ! 🎯
Pour ne pas se planter
- Vérifie que tu es bien dans un contexte multisite
- Garde toujours une trace du site de départ
- Teste bien tes requêtes avant de les lancer en prod
- Documente ce que tu fais (ton « toi du futur » te remerciera)
Le mot de la fin
set_blog_id() c’est un peu comme avoir un super pouvoir dans WordPress Multisite. C’est puissant mais avec les grands pouvoirs… tu connais la suite ! 😉 Dans le doute, commence par switch_to_blog(), c’est plus sûr et plus simple.
Pour creuser le sujet
- Jette un œil à la doc WordPress sur le Multisite
- Explore les hooks disponibles autour de la gestion des sites
- Apprends à optimiser tes requêtes cross-sites
- Découvre les outils de debug multisite
T’as des questions ou des retours d’expérience avec set_blog_id() ? Balance tes commentaires, on est là pour partager ! 🚀