web-dev-qa-db-fra.com

Autoriser l'activation du plug-in uniquement sur le site racine du multisite

Je développe le moniteur de fichiers wordpress et le plugin .

Son but est de rechercher des fichiers altérés et cela fonctionne très bien pour une installation unique de WP. Mais lorsque vous regardez sur plusieurs sites, ce n'est pas quelque chose qui doit être activé sur tous les sous-sites, car ils partagent tous les mêmes fichiers et (pour être honnête), seul un administrateur réseau doit être celui qui souhaite être averti des modifications de fichier. .

Voici donc ma question:

Comment pourrais-je le programmer pour qu'il ne soit autorisé à être installé/exécuté qu'à partir du site racine d'une installation multi-site? Donc, cela signifie ne pas autoriser son installation sur le réseau et son activation à partir du blog racine.

Quelqu'un sait-il comment je pourrais y arriver?

1
Brady

Vous pouvez vérifier si la constante SITE_ID_CURRENT_SITE correspond à get_current_site()->id. Ce qui suit fait ceci pour l'activation. Pendant l'exécution, vous devez le vérifier à nouveau.

register_activation_hook( __FILE__, 'force_main_site_installation' );

function force_main_site_installation()
{
    if ( defined( 'SITE_ID_CURRENT_SITE' )
        and SITE_ID_CURRENT_SITE !== get_current_site()->id 
    )
    {
        if ( function_exists('deactivate_plugins') )
        {
            deactivate_plugins( __FILE__ );
        }
        die( 'Install this plugin on the main site only.' );
    }
}
3
fuxia

D'abord l'explication des points d'ancrage désinstallation/activation/désactivation .

Deuxièmement: recherchez is_blog_installed( $blog_ID );, puis examinez toutes les fonctions get_blog_whatever(); et get_blogaddress_wwhat (); `(je suppose que vous utilisez phpstorm en tant qu'IDE, de sorte que les fonctions de complétion automatique devraient être disponibles).

Modifier: Vous pouvez également essayer de limiter le menu disponible en enregistrant les pages d’administrateur avec network_admin_menu() (ne déclenche que si is_network_admin()), user_admin_menu(); (ne déclenche que si is_user_admin()) au lieu de admin_menu();.

0
kaiser

Seule cette solution a fonctionné pour moi:

register_activation_hook( __FILE__,  function () {
    if ( is_multisite() && ! strpos( $_SERVER['REQUEST_URI'], 'wp-admin/network/plugins.php' ) ) {
        die ( __( '<script>alert("Activate this plugin only from the NETWORK DASHBOARD.");</script>') );
    }
    // ...............
});
0
T.Todua