web-dev-qa-db-fra.com

admin_notices non affichés dans le plugin

Je sais que je suis probablement en train de faire quelque chose de stupide mais je n'arrive pas à le faire fonctionner. J'essaie de mettre en place une petite API pour mon plugin et de créer une classe pour afficher les avis d'administrateur un peu plus facilement. Voici ce que j'ai

// 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;});

Et dans ma classe, il y a cette fonction:

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

Donc je suppose que je demande, qu'est-ce que je fais de mal pour que cet avis d'administrateur ne soit pas affiché? Existe-t-il une solution de contournement pour que cela fonctionne? Merci.

1
Jared

Essaye ça. J'ai nettoyé votre tableau arg et ai tout placé dans une fonction. Aussi, pourquoi utilisez-vous la méthode getInstance lorsque votre efpd_admin_notice est public? Consultez le code ci-dessous pour accéder à cette méthode correctement.

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

Lorsque vous utilisez Multi-Site, vous devez effectuer les deux tâches suivantes:

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

btw, $plugin_update variable u utilisée dans la fonction, aura la valeur NULL, car elle a été définie en dehors de la fonction.

2
T.Todua