web-dev-qa-db-fra.com

Pourquoi admin_notices n'affiche-t-il pas mon texte? [Simple Plugin, Débutant]

Voici un code qui résulte de quatre jours d’étude de Wordpress et de PHP. Malheureusement, cela ne fonctionne pas comme prévu. Rien ne s'affiche dans la barre admin_notices.

A l'origine, je pensais que c'était le $ filename = is_plugin_active ($ filename)? "$ filename: Active": "$ filename: Disabled"; , mais ce n'était pas le problème. Ce que vous dites?

function show_names()
{                  
  $paths = array();

  foreach (glob("*/plugins/*") as $filename) {                                                                                                          
    $filename = is_plugin_active($filename) ? "$filename: Active" : "$filename: Disabled";
    $filename = str_replace('wp-content/plugins/', '', $filename);
    $paths[] = $filename;   
    }

  $paths = implode("---", $paths);
  echo $paths;
}

add_action("admin_notices", "show_names");
1
user1787531

var_dump($paths); indique que la variable votre $ path est une chaîne vide. Cela ne montre rien parce qu'il n'y a rien à montrer.

Puisque vous semblez essayer de trouver tous les plugins, vous devriez jeter un oeil à get_plugins . glob va être relatif au répertoire de travail actuel (avec variera en fonction de la configuration de votre serveur) et is_plugin_active active prend un plugin_basename .

get_plugins retournera un tableau associatif avec les noms de base de plugin comme clés comme données d'en-tête de fichier comme valeurs (dans un tableau).

Quelques autres notes:

admin_notices ne met pas automatiquement vos avis en forme pour donner une belle apparence. Vous pouvez envelopper votre avis avec <div class="error"> ou <div class="updated"> pour le faire.

Attribuez toujours un préfixe unique à vos fonctions ou placez-les dans un espace de noms (PHP 5.3+ uniquement).

Code révisé:

<?php
add_action('admin_notices', 'wpse72637_show_names');
function wpse72637_show_names()
{                  
    $paths = array();

    foreach(get_plugins() as $p_basename => $plugin)
    {
        $paths[] = "{$plugin['Name']}: " .
            (is_plugin_active($p_basename) ? 'Active' : 'Disabled');
    }

    echo '<div class="updated"><p>', implode(' --- ', $paths), '<p></div>';
}
2
chrisguitarguy