WordPress Multisite : Jongler avec les bases de données grâce à set_blog_id()

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 :

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

  1. Ne pas oublier de rentrer à la maison : Toujours revenir au site initial
  2. Attention aux effets de bord : La fonction ne gère que la BDD
  3. 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 :

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

  1. Vérifie que tu es bien dans un contexte multisite
  2. Garde toujours une trace du site de départ
  3. Teste bien tes requêtes avant de les lancer en prod
  4. 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

T’as des questions ou des retours d’expérience avec set_blog_id() ? Balance tes commentaires, on est là pour partager ! 🚀