it-swarm.com.de

get_option kompatibel mit WordPress-Netzwerk (Multisite)?

Ich habe diese Funktion in einem Plugin, das auf WP-Installation funktioniert, aber es funktioniert nicht auf WordPress MU.

 if( !get_option( $option-name ) ) {
        // something
            } else {
    // something else
    }

Wie kann ich die get_option mit der Multisite-Installation kompatibel machen?.

// Ich verwende das Redux-Framework, habe eine Option erstellt und wollte eine Bedingung haben, um zu überprüfen, ob die Option verwendet wird oder nicht.

Vielen Dank

1
dzdesigner

Bei der Arbeit mit mehreren Standorten gibt es zwei häufig verwendete Funktionsgruppen zum Abrufen/Aktualisieren von Optionen.

Jetzt ... liegt es an Ihnen, wie Sie Ihre Optionen strukturieren und in der Datenbank speichern. Dies hängt von der Funktionalität ab, die Ihr Plugin hinzufügt, und von dem Ort, an dem Sie Optionen speichern/abrufen möchten.

Single Site Konfiguration

get_option() und update_option() werden verwendet, um mit der wp_options -Tabelle zu interagieren. Diese Tabelle ist für jede Blog-ID spezifisch. Möglicherweise haben Sie eine wp_options_2- und eine wp_options_3-Tabelle. Dabei entsprechen 2 und 3 der Blog-ID.

Wenn Sie get_option() in Ihrem Code verwenden ... wird diese Option in der wp_options-Tabelle der entsprechenden Blog-ID gesucht. Dies bedeutet, dass jede untergeordnete Site hier einen anderen Wert haben kann.

Konfiguration mehrerer Standorte

Die anderen Funktionen sind get_site_option() und update_site_option(). Diese beiden Funktionen werden zur Interaktion mit der Tabelle site_meta verwendet. Die site_meta-Tabelle ist nur einmal vorhanden und wird für globale Optionen für alle Unterwebsites verwendet.

Wenn Sie in Ihrem Code get_site_option() verwenden, wird diese Option aus der Tabelle site_meta entfernt. Mit anderen Worten, jede Unterwebsite verwendet dieselbe Option aus der Tabelle site_meta.

Benutzerdefinierter Code zum Überprüfen, ob Multisite aktiv ist

Wenn ich ein Plugin codiere, das mit mehreren Sites kompatibel sein muss, wird eine benutzerdefinierte Funktion hinzugefügt, mit der überprüft wird, ob es sich bei der Site um eine Netzwerkinstallation handelt. Wenn dies nicht der Fall ist, ziehe ich von den Website-Meta-Optionen.

// First, I define a constant to see if site is network activated
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
    // Makes sure the plugin is defined before trying to use it
    require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
}
if (is_plugin_active_for_network('my_plugin_folder/main.php')) {  // path to plugin folder and main file
    define("THIS_PLUGIN_NETWORK_ACTIVATED", true);
}
else {
    define("THIS_PLUGIN_NETWORK_ACTIVATED", false);
}

// Wordpress function 'get_site_option' and 'get_option'
function get_this_plugin_option($option_name) {

    if(THIS_PLUGIN_NETWORK_ACTIVATED== true) {

        // Get network site option
        return get_site_option($option_name);
    }
    else {

        // Get blog option
        return get_option($option_name);
    }
}

// Wordpress function 'update_site_option' and 'update_option'
function update_this_plugin_option($option_name, $option_value) {

    if(THIS_PLUGIN_NETWORK_ACTIVATED== true) {

        // Update network site option
        return update_site_option($option_name, $option_value);
    }
    else {

    // Update blog option
    return update_option($option_name, $option_value);
    }
}

Jetzt können wir einfach get_this_plugin_option() oder update_this_plugin_option() verwenden. und unser Code bestimmt, ob die Site netzwerkaktiviert ist oder nicht .. und aktualisiert oder bezieht die Option aus der entsprechenden Optionstabelle.

Dies verhindert, dass Code zweimal geschrieben werden muss. Oder Sie verwenden zwei separate Hooks, wenn Sie für Netzwerkaktivierungen codieren.

4
josh