web-dev-qa-db-ja.com

admin_noticesにテキストが表示されないのはなぜですか? [簡単なプラグイン、初心者]

これは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");
1
user1787531

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>';
}
2
chrisguitarguy