web-dev-qa-db-ja.com

admin_noticesがプラグインに表示されない

私はおそらくここで何かおかしなことをしているのを知っていますが、私はこれを実行することができません。私は自分のプラグイン用に小さなAPIを設定し、管理通知を表示するクラスをもう少し簡単に作成しようとしています。これは私が持っているものです:

// Send data to class to get HTML for admin notice
$efpd=Efpdd::getInstance();
$plugin_update = $efpd->efpd_admin_notice(
    $notice_info = array(
        'type' => 'update',
        'message' => 'The plugin has just been updated.',
        'button' => 'Click for details'
    )
);
//wp_die(var_dump($plugin_update)); // Testing output of admin notice HTML code
add_action('admin_notices',function(){echo $plugin_update;});

そして私のクラスでは、この機能があります:

public function efpd_admin_notice($data=array()){
    extract($data); // Extracts $message, $type, and $button from $data array
    if(empty($message) && !empty($type)){ // If no message was passed through the $data array, create one based on the type of notice passed, also begin the HTML output here
        switch($type){
            case 'error':
                $message = 'There\'s been an error!';
                $return = "<div id=\"message\" class=\"error\">\n";
            break;
            case 'update':
                $message = 'There\'s been an update!';
                $return = "<div id=\"message\" class=\"updated\">\n";
            break;
            default:
                $message = 'There\'s something wrong with your code...';
                $return = "<div id=\"message\" class=\"error\">\n";
            break;
        }
    }
    if(empty($button)) $button = 'Click Here';
    $return .= "    <p style=\"float: left;\">{$message}</p>\n";
    $return .= "    <p style=\"float: left;\"><a href=\"{$settings_url}&amp;clear_cache=y\">{$button}</a></p>\n";
    $return .= "</div>\n";
    return $return;
}

だから私は私が聞いていると思います、私はこの管理者通知を表示しないようにするために何を間違ってやっているのですか?これを機能させるための回避策はありますか?ありがとう。

1
Jared

これを試して。私はあなたのarg配列をきれいにして関数にすべてを置きました。また、あなたのefpd_admin_noticeが公開されているのに、なぜあなたはgetInstanceメソッドを使っているのですか?このメソッドに正しくアクセスするには、以下のコードを参照してください。

function plugin_update(){
    $plugin_update = Efpdd::efpd_admin_notice(array(
        'type' => 'update',
        'message' => 'The plugin has just been updated.',
        'button' => 'Click for details'
    );
    echo $plugin_update;
);
add_action('admin_notices', 'plugin_update');
3
Brian Fegter

マルチサイトを使用するときは、両方を行う必要があります。

add_action('admin_notices',         'your_function');
add_action('network_admin_notices', 'your_function');

しかし、関数内で使用される$plugin_update変数は、関数の外部で定義されているため、NULL値を持ちます。

2
T.Todua