Pluginentwicklung für WordPress 3 Multisite

Im Zuge der Anpassungen für mein Wetterplugin wp-forecast sind mir ein paar Punkte aufgefallen, die man bei der Pluginentwicklung für den Multisitebetrieb beachten sollte. Ich habe eine ganze Weile gesucht, bis ich die Punkte heraus gefunden hatte. Daher schreibe ich sie hier auf. Evtl. erspart euch das ein wenig Arbeit.

Mit der Funktion register_activation_hook teilt man WordPress mit welche Funktion aufgerufen werden soll, wenn das Plugin aktiviert wird. Im Multisitebetrieb wird dieser Hook allerdings nur während der Aktivierung im Basisblog (ID=1) aufgerufen und nicht, wenn das Plugin in einem User-Blog aktiviert wird. Ob es ein Fehler ist oder ein Feature, kann ich nicht sagen. Bei mir führte dieser Sachverhalt dazu, dass Default-Parameter, die während des Aktvierens in der Datenbank abgelegt werden nicht vorhanden waren und dementsprechend auch nicht berücksichtigt wurden. Abhilfe schafft eine entsprechende Abfrage und ein eigener Aufruf der Aktivierungsfunktion.

Beispiel:

if ( function_exists("is_multisite") && is_multisite() && $blog_id!=1
	 && ! wpf_get_option('wpf_sa_allowed'))
	wp_forecast_activate();

Im Beispiel wird zunächst geprüft ob das Blog im Multisitemodus betrieben wird und das Aktive Blog nicht das Blog mit der ID 1 ist (also nicht das Basisblog). Wird die benötigte Option zusätzlich nicht in der Datenbank gefunden, dann rufen wir die Aktivierungsfunktion auf, die alle fehlenden Standardparameter in die Datenbank schreibt.

Von Interesse ist auch das Verhalten der Funktion get_option. get_option versucht immer den übergebenen Parameter aus der Options-Tabelle des aktiven Blogs zu lesen. Das aktive Blog findet man in der globalen Variabel $blog_id. Möchte man so wie ich auch Parameter aus der Basisblog-Options-Tabelle (also wp_options) lesen, so muss man dazu die Funktion get_blog_option verwenden. Zusätzlich zum Namen des gewünschten Paramters akzeptiert diese Funktion einen Parameter $blog_id, um das entsprechende Blog anzugeben. Der Aufruf get_blog_option(1, $name) versucht also den Parameter $name aus der Options-Tabelle des Basisblog zu lesen.
Für mich war dies wichtig, da ich dem Administrator im Basiblog die Möglichkeit geben wollte bestimmte Einstellungen für alle User vorzugeben. Diese Einstellungen speichere ich in der Tabelle wp_options. Ist aber einanderes Blog aktiv, dann wurden die Parameter nicht gefunden, da WordPress immer versuchte die Admineinstellungen aus der Options-Tabelle des User-Blogs (also nicht des Basisblogs) zu lesen.

Habt ihr ähnliche oder weitere Erfahrungen bei der Multisite-Pluginentwicklung gemacht?
Freue mich auf eure Kommentare.

Kommentare

  1. Steve McAnally:

    I really like the plugin. My only issue is that we are building a web site that has static pages for a conventional web site and a blog also. The plugin shows up on the blog sidebar when using the twenty-ten theme. But…I need for it to show up on all of the static pages also. I have tried the shortcode, but it doesn’t appear to work.

    Can you help me out??

    Thanks…

    Antworten

    • webmaster:

      Hello Steve,

      the shortcode works on pages or posts without problems here. Can you give me how you entered it? And be careful sometimes using shortcodes in the visuell editor leads to html entity translation. Please try entering it in html mode too.
      Regards, Hans

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

:bye: 
:good: 
:negative:  
:scratch: 
:wacko:  
:yahoo: 
B-) 
mehr...
 

   Mit der Nutzung dieses Formulars erklärst Du Dich mit der Speicherung und Verarbeitung Deiner Daten durch diese Website einverstanden. Mehr Informationen dazu findest Du in der Datenschutzerklärung.

ALL-INKL.COM - Webhosting Server Hosting Domain Provider

Diese Seite verwendet Cookies. Mit der Nutzung von tuxlog erklärst Du Dich mit der Verwendung von Cookies einverstanden. Detaillierte Informationen über die Verwendung von Cookies auf dieser Website findest Du in der Datenschutzerklärung.