Почему admin_notices не отображает мой текст?

Вот какой код, который является результатом четырех дней изучения WordPress и PHP. К сожалению, это не работает так, как предполагается. Ничто не отображается на панели admin_notices.

Первоначально я думал, что это $ filename = is_plugin_active ($ filename)? "$ filename: Active": "$ filename: Disabled"; но это не проблема. Что скажешь?

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"); 

var_dump($paths); показывает, что ваша переменная $ paths является пустой строкой. Это ничего не показывает, потому что ничего не показывать.

Поскольку вам кажется, что вы пытаетесь найти все плагины, вы должны взглянуть на get_plugins . glob будет относиться к текущему рабочему каталогу (который будет меняться в зависимости от настройки сервера), а is_plugin_active active принимает имя plugin_basename .

get_plugins вернет ассоциативный массив с get_plugins плагинов как ключи, как данные заголовка файла, как значения (в массиве).

Несколько других примечаний:

admin_notices не форматирует ваши уведомления, чтобы выглядеть красиво. Вы можете обернуть это уведомление с помощью <div class="error"> или <div class="updated"> .

Всегда предоставляйте своим функциям уникальный префикс или помещайте их в пространство имен (только для PHP 5.3+).

Пересмотренный код:

 <?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>'; }