web-dev-qa-db-fra.com

get_option compatible avec le réseau wordpress (multisite)?

J'ai cette fonction dans un plugin qui fonctionne sur wp install mais cela ne fonctionne pas sur wordpress MU.

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

Comment puis-je rendre get_option compatible avec l'installation multisite.

// J'utilise le framework redux, j'ai créé une option et je voulais avoir une condition pour vérifier si l'option est utilisée ou non .. mais cela a bien fonctionné avec l'installation de wp mais pas avec celle de MU.

Merci

1
dzdesigner

Lorsque vous travaillez avec plusieurs sites, il existe deux ensembles de fonctions couramment utilisés pour extraire/mettre à jour les options.

Maintenant ... la façon dont vous structurez vos options et les enregistrez dans la base de données dépend de vous. Cela dépend de la fonctionnalité ajoutée par votre plugin et de l'endroit où vous souhaitez stocker/extraire les options.

Configuration de site unique

get_option() et update_option() sont utilisés pour interagir avec la table wp_options. Ce tableau est spécifique à chaque identifiant de blog. Vous pouvez avoir un wp_options_2 et une table wp_options_3; où 2 et 3 correspondent à cet identifiant de blog.

Si vous utilisez get_option() dans votre code ... il va rechercher cette option dans la table wp_options de l'ID de blog correspondant. Cela signifie que chaque sous-site pourrait avoir une valeur différente ici.

Configuration multi-sites

Les autres fonctions sont get_site_option() et update_site_option(). Ces deux fonctions permettent d’interagir avec la table site_meta. La table site_meta n'existe qu'une seule fois .. et est utilisée pour les options globales de tous les sous-sites.

Si vous utilisez get_site_option() dans votre code ... il va extraire cette option de la table site_meta. En d'autres termes, chaque sous-site utilisera la même option de la table site_meta.

Code personnalisé pour vérifier si le multisite est actif

Ce que je fais quand je code un plugin qui doit être compatible multisite .. consiste à ajouter une fonction personnalisée pour vérifier si le site est une installation réseau. Si c'est ... je tire du méta du site ... sinon, je tire des options du site.

// 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);
    }
}

Maintenant, nous pouvons simplement utiliser get_this_plugin_option() ou update_this_plugin_option(); et notre code déterminera si le site est activé ou non par le réseau .. et mettra à jour ou obtiendra l’option de la table d’options correspondante.

Cela évite d'avoir à écrire deux fois le code .. ou à utiliser deux crochets distincts lors du codage pour les activations du réseau.

4
josh