web-dev-qa-db-fra.com

Comment configurer un plug-in réseau sur le réseau avec uniquement mes paramètres?

J'ai configuré un site WP MU et installé un plug-in dans le site principal de MU. Je veux que ce plugin soit activé sur tous les sites et caché des administrateurs du site si possible. Je veux que les paramètres du plugin proviennent du site super réseau, pas des administrateurs du site. Je vois ceci sur ma page de plugins super admin:

enter image description here

Remarquez le lien d'activation du réseau. Je l'ai activé mais les nouveaux sites n'ont pas les paramètres du site principal et le plug-in n'est pas masqué (ce n'est pas aussi important s'il est masqué ou non).

2
1.21 gigawatts

Pour l'activation de votre plugin, vous devez écrire quelques lignes de code dans le plugin.

L'installation de WordPress s'exécute à partir de wp-admin/install.php. Ce que nous recherchons, c'est que certaines actions soient déclenchées une fois l'installation réussie. Un bon endroit pour insérer notre code se trouve juste au-dessus de ceci:

<h1><?php _e( 'Success!' ); ?></h1>

Nous voyons un bloc de code qui commence par:

if ( $error === false ) {
$wpdb->show_errors();
$result = wp_install($weblog_title, $user_name, $admin_email, $public, '', $admin_password);
extract( $result, EXTR_SKIP );

J'ai choisi d'insérer nos actions après la dernière déclaration d'extrait. Pour activer les plugins, j'ai ajouté:

require_once( dirname( dirname( __FILE__ ) ) . '/wp-admin/includes/plugin.php' );
activate_plugin( dirname( dirname( __FILE__ ) ) . '/wp-content/plugins/plugin-dir-name/pluginfile.php' );

Et pour cacher le plugin de la liste des plugins:

/**
 * Filter the list of plugins according to user_login
 *
 * Usage: configure the variable $plugin_credentials, which holds a list of users and their plugins.
 * To give full access, put a simple string "ALL"
 * To grant only for some plugins, create an array with the Plugin Slug, 
 *    which is the file name without extension (akismet.php, hello.php)
 *
 * @return array List of plugins
 */
function wdm_plugin_permissions( $plugins )
{
    // Config
    $plugin_credentials = array(
        'admin' => "ALL",
        'other-admin' => array(
            'akismet',
        ),
        'another-admin' => array(
            'akismet',
            'hello',
        ),
    );

    // Current user
    global $current_user;
    $username = $current_user->user_login;

    // Super admin, return everything
    if ( "ALL" == $plugin_credentials[ $username ] )
        return $plugins;

    // Filter the plugins of the user
    foreach ( $plugins as $key => $value ) 
    { 
        // Get the file name minus extension
        $plugin_slug = basename( $key, '.php' );

        // If not in the list of allowed plugins, remove from array
        if( !in_array( $plugin_slug, $plugin_credentials[ $username ] ) )
            unset( $plugins[ $key ] );
    }

    return $plugins;
}
add_filter( 'all_plugins', 'wdm_plugin_permissions' );

Vous devez modifier le code en fonction des rôles de vos utilisateurs.

Pour masquer le code du plugin, vous pouvez vous référer à this

1
WisdmLabs