web-dev-qa-db-fra.com

Comment obtenir des plugins?

J'essaie d'obtenir le 'slug' utilisé pour chaque plugin installé. Je n'ai pas trouvé de bonne solution pour cela. J'ai créé cette fonction pour récupérer toutes les limaces et les retourner dans un tableau. J'espère qu'il y a un meilleur moyen. Est-ce que cela fonctionnera pour tous les plugins?

 function l7wau_get_slugs(){
        $plugin_array = get_plugins();
        $url_array = array_keys( $plugin_array );
        foreach ( $url_array as $plugin_url ){
            $temp_array = explode( '/', $plugin_url );
            $slugs[] = str_replace( '.php', '', end( $temp_array ) );
        }
        return $slugs;
 }

Merci d'avance pour votre aide.

2
Jeff Mattson

J'espère qu'il y a un meilleur moyen

Vous pouvez écrire votre code un peu mieux, par exemple en ajoutant une protection en cas de défaillance de votre fonction. Il ne faut jamais croire que le code fonctionnera toujours, même si on dirait. Codez toujours dans cet état d'esprit, votre code sera échouera.

Je vais simplement faire une boucle foreach puis faire passer les clés par le biais de basename , tout ce qui se passera après le dernier / s'il existe et supprimera également l'extension .php.

En ce qui concerne get_plugins() , il s'agit certainement d'une bonne option car il utilise le système de cache intégré pour mettre en cache ses résultats.

Je réécrirais probablement votre code comme suit: (Nécessite PHP 5.4+)

function l7wau_get_slugs()
{
    $plugin_array = get_plugins();

    // First check if we have plugins, else return false
    if ( empty( $plugin_array ) )
        return false;

    // Define our variable as an empty array to avoid bugs if $plugin_array is empty
    $slugs = [];

    foreach ( $plugin_array as $plugin_slug=>$values ){
        $slugs[] = basename(
                $plugin_slug, // Get the key which holds the folder/file name
                '.php' // Strip away the .php part
            );
    }
    return $slugs;
}

Est-ce que cela fonctionnera pour tous les plugins?

Oui, cela fonctionnera pour les plugins dans le répertoire des plugins. get_plugins() utilise get_plugin_data() qui analyse les données d'en-tête du plug-in pour extraire les métadonnées. Il suffit de regarder les sources incluses dans les liens.

4
Pieter Goosen

Notez que si vous cherchez à obtenir le plugin plug-in à utiliser avec le serveur de mise à jour de plug-in (par exemple, pour vérifier et afficher si votre plug-in dispose d'une mise à jour sur un écran de plug-in), vous devez lire cette réponse à une question similaire:

https://wordpress.stackexchange.com/a/216940/76440

Donc dans ce cas cela fonctionnerait:

 function get_plugin_update_slugs(){
    $plugin_array = get_plugins();
    if (empty($plugin_array)) {return array();}
    foreach ( $plugin_array as $pluginfile => $plugindata) {
        $slugs[] = sanitize_title($plugindata['Name']);
    }
    return $slugs;
 }
0
majick