Davel's TechBlog

Icon

Trouvailles, plugins et autres "trucs" destinés à faciliter la vie des pov' développeurs comme moi. Spécialité AS3, PHP et un peu de Javascript.

WordPress multisite plugins et base de données : le cocktail foiré

Diantre que de mots clefs dans ce titre pompeux. C’est fait exprès figurez-vous, parce que je ne doute pas qu’un jour quelqu’un tombe sur la même merde que celle que j’ai eu la malchance de subir récemment et soit très content de trouver cet article.

Déjà sachez que si vous n’utilisez pas l’option multisites de WordPress, ce que je vais dire ne vous intéressera pas. A fortiori si vous n’utilisez pas du tout WordPress c’est encore plus le cas… non mais vous faites quoi à lire cet article dans ce cas ? Allez vous trouver une activité sympa, le macramé ou un truc du genre.

Lorsqu’on a mis cette option en place, il devient possible d’activer les plugins « pour le réseau » c’est à dire de les activer par défaut dans tous les ‘sites’ qui seront créés par la suite. (Admin du réseau > plugins) Une bonne idée que voilà non ?

Et bin ça le serait si à chaque création d’un nouveau ‘site’ la fonction register_activation_hook() était lancée mais non en fait non. Allez savoir pourquoi ils n’ont pas cru ça nécessaire. Or si, comme c’était le cas pour moi, on fait appel à la base de données dans son plugin et qu’il faut une table spécifique par ‘site’ alors pour être informé de ladite création c’est peau d’zob. Avouez que c’est completement con.

Une solution ? Oui deux avec chacune leurs avantages et inconvénients.

La première consiste à ne pas activer les plugins sur le réseau mais ‘site’ par ‘site’. Ça fonctionne très bien mais peut créer des soucis avec le thème si d’aventure ils ne sont pas activés, à cause d’un éditeur trop farceur par exemple.

La seconde est légèrement plus lourde mais efficace : Il faut ajouter ce code à chaque appel du plugin qui fait appel à la base :

$matable = $wpdb->prefix . 'matabledeplugin';
if($wpdb->get_var("show tables like '".$matable."'") != $matable) {
	// la table n'existe pas, procéder à l'installation en SQL, CREATE tout ça...
}

note: $wpdb->prefix est bien renseigné pour pointer vers les tables d’un ‘site’ en particulier en question et non simplement de wordpress.

Ça fait une requête en plus par appel de page, et ça peut être relou pour un système qui compte beaucoup de visites.

À vous de voir.

Be Sociable, Share!

Category: Divers

Tagged: , , ,

Leave a Reply

Additional comments powered by BackType