web-dev-qa-db-fra.com

admin_notices after register_uninstall/deactivate_hook

J'ai ajouté avec succès des avis d'administration à afficher sur register_activation_hook, et lorsque le plug-in est mis à jour, mais je ne vois aucun moyen d'afficher admin_notices après les points d'ancrage de désinstallation ou de désactivation. Est-ce possible? Sinon, pouvez-vous utiliser javascript à ce stade? (oui en quelque sorte).


EDIT:

Pour répondre à @G. M. J'ai déjà lu la documentation et @kaiser. J'ai déjà vu votre superbe travail écrit sur ces crochets, mais à moins que je ne sois négligé et que je manque quelque chose, ces deux crochets semblent fonctionner différemment du crochet d'activation. Voici ce que j'ai testé:

Ceci ne permet pas d'afficher une notification sur la page d'administration, en cas de désactivation ou de désinstallation (bien qu'avec uniquement la désactivation , vous verrez le message affiché brièvement sur un écran blanc après le raccordement du hook, mais juste avant le rechargement de la page d'administration du plugin):

register_deactivation_hook(__FILE__, "gfahp_deactivate");
function gfahp_deactivate(){
    $notices = sprintf('%sSome notice%s', '<div class="error fade"><p>', '</p></div>');
echo $notices;
 }

Cela ne fonctionne pas non plus (sur l'un ou l'autre):

register_deactivation_hook(__FILE__, "gfahp_deactivate");

function gfahp_deactivate(){  
    add_action( 'admin_notices', 'gfahp_checks', 0 );
 }
function gfahp_checks(){
    $notices = sprintf('%sSome notice%s', '<div class="error fade"><p>', '</p></div>');
    echo = $notices; // return does not work either
 }

Javascript ne fonctionne pas sur la désactivation mais PAS désinstaller:

register_deactivation_hook(__FILE__, "gfahp_deactivate");
function gfahp_deactivate(){
    $notices = 'Some notice';
    echo "<script>window.alert('$notices');</script>";
 }
2
orionrush

La réponse courte est non, ce n'est pas possible. Lorsque vous désactivez votre plug-in, il est désactivé. Par conséquent, votre action admin_notices n'est pas exécutée lorsque l'écran d'administration est actualisé. Vous pouvez le confirmer vous-même en utilisant l'action d'une manière légèrement différente.

Dans votre fonction de désactivation, incluez la ligne suivante:

set_transient('my_deactivation_transient', 'My plugin is being deactivated', 100);

Faites en sorte que votre fonction admin_notices ressemble à ceci:

function my_admin_notices()
{
    $message = get_transient('my_deactivation_transient');

    if (empty($message)) return;

    echo "<div class='error'><p>$message</p></div>";
}

Lorsque vous désactivez votre plugin, vous ne verrez aucun message. Lorsque vous réactiverez votre plugin, vous verrez le message. Ce n'est pas que la fonction admin_notices n'est pas appelée, c'est simplement que le plugin n'est pas actif lorsque l'écran d'administration est actualisé.

1
bseddon