web-dev-qa-db-fra.com

Afficher l'avertissement si le plugin est manquant

Désolé si cette question est un peu triviale, mais j'écris un thème qui dépend d'un plugin à installer. C'est un thème multilingue, j'ai donc absolument besoin que l'utilisateur ait Polylang installé. Je pensais simplement copier les fichiers du plugin dans mon thème, mais cela signifierait que les utilisateurs de ce thème ne recevront pas les mises à jour de Polylang.

J'espère donc que vous conviendrez que la meilleure solution consiste à forcer l'utilisateur à installer polylang. Maintenant, j'aimerais savoir quel est le meilleur moyen de faire savoir à l'utilisateur qu'il a besoin d'installer polylang? Est-il possible d'installer un plugin automatiquement? Que devrait-il se passer si l'utilisateur désinstallait polylang afterwars, cassait simplement le thème ou retombait dans le thème twentyeleven?

J'aimerais vraiment entendre les idées des autres sur ce sujet.

1
Jules

exemple de code que vous pouvez ajouter et modifier ... pour vérifier si le plug-in est installé. // addition vérification sur init hook.

add_action('admin_init', 'wpse_73859_init');
function wpse_73859_init(){
    // if - we in wp-admin
    // if - we class of polylang not found
    // and if we can manage_options (there a lot of different 
    //     capabilities you can use install_plugins for example...)

    if (!class_exists('Polylang') && current_user_can('manage_options')){
        // message function created on a fly... 
        $msg = create_function('', 'echo "<div class=\"updated\"><p>require polylang plugin</p></div>";');
        // and finaly notice! 
        add_action('admin_notices', $msg);
    }
}

Vous pouvez réellement installer un plugin (téléchargement silencieux/décompresser/activer), mais son SO unacepted ne vous permet pas de créer une image. Vous cassez fondamentalement la vie privée de la personne qui utilise votre thème.

1
Butuzov
// The is_plugin_active() function is only included by default in the admin,
// load it on the front-end too if needed.
if ( ! function_exists('is_plugin_active'))
{
    include_once ABSPATH.'wp-admin/includes/plugin.php';
}

// Check if a certain plugin is activated
if ( ! is_plugin_active('plugin-directory/plugin-file.php'))
{
    // It's probably too drastic to simply exit, but do whatever you want here
    exit('Plugin X requires plugin Y. Please, install plugin Y.');
}

Codex: is_plugin_active()

1
Geert