これはWordpressとPHPを4日間研究した結果のコードです。残念なことに、それはそれが想定されている方法では機能していません。 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
はプラグインのベース名をキーとして連想配列をファイルヘッダデータとして値として(配列で)返します。
他のいくつかのメモ:
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>';
}