2012-03-21 5 views

risposta

25

per le attivazioni di plugin, il gancio 'admin_notices' non possono essere utilizzati direttamente, perché c'è un reindirizzamento. Una soluzione alternativa è di memorizzare la tua notifica nella tabella delle opzioni e controllarla la prossima volta. Inoltre, se vuoi anche aggiornare gli aggiornamenti dei plugin e le attivazioni, dovrai utilizzare un altro hook, come "admin_init" (dal WP 3.1, vedi http://make.wordpress.org/core/2010/10/27/plugin-activation-hooks/).

Ecco un plug-in di esempio completo che gestisce sia l'attivazione che l'aggiornamento. Ho reso la notifica differita un array in modo da poterli impilare.

<?php 
/* 
Plugin Name: My Plugin 
*/ 

register_activation_hook(__FILE__, 'my_plugin_activation'); 
function my_plugin_activation() { 
    $notices= get_option('my_plugin_deferred_admin_notices', array()); 
    $notices[]= "My Plugin: Custom Activation Message"; 
    update_option('my_plugin_deferred_admin_notices', $notices); 
} 

add_action('admin_init', 'my_plugin_admin_init'); 
function my_plugin_admin_init() { 
    $current_version = 1; 
    $version= get_option('my_plugin_version'); 
    if ($version != $current_version) { 
    // Do whatever upgrades needed here. 
    update_option('my_plugin_version', $current_version); 
    $notices= get_option('my_plugin_deferred_admin_notices', array()); 
    $notices[]= "My Plugin: Upgraded version $version to $current_version."; 
    update_option('my_plugin_deferred_admin_notices', $notices); 
    } 
} 

add_action('admin_notices', 'my_plugin_admin_notices'); 
function my_plugin_admin_notices() { 
    if ($notices= get_option('my_plugin_deferred_admin_notices')) { 
    foreach ($notices as $notice) { 
     echo "<div class='updated'><p>$notice</p></div>"; 
    } 
    delete_option('my_plugin_deferred_admin_notices'); 
    } 
} 

register_deactivation_hook(__FILE__, 'my_plugin_deactivation'); 
function my_plugin_deactivation() { 
    delete_option('my_plugin_version'); 
    delete_option('my_plugin_deferred_admin_notices'); 
} 

UPDATE: C'è anche un modo comune per utilizzare al posto di set_transient()update_option(), e per indirizzare i messaggi per l'utente amministratore corretto. Questo post riguarda Metabox, non plug-attivazione, ma le tecniche funzionano allo stesso un po 'ovunque in Dashboard, per quanto ne so: https://wordpress.stackexchange.com/questions/15354/passing-error-warning-messages-from-a-meta-box-to-admin-notices

+0

Questo sembra buono, il mio unico commento sarebbe quello di ASCIUGARE la parte in cui si aggiunge un nuovo avviso. – pguardiario

+0

Sì, le tre righe '$ note = get_option (...); $ comunicazioni [] = ...; update_option (..., $ note) 'può essere estratto in funzione generale' my_plugin_add_notice() '. Lo vedi spesso con un parametro per 'nota' contro 'errore'.Quindi la funzione di rendering quindi la visualizza in modo WP come un banner blu o rosso, utilizzando la classe css 'aggiornamento' o 'errore', se ricordo correttamente. – kitchin

3

Basta usare uno <div class='updated'>. Per esempio -

echo "<div class='updated'>Test Plugin Notice</div>"; 
+0

sì, ma poi questo avviso sta mostrando tutte le volte, voglio come questo avviso scomparirà, quando clicco sul link in configurazione a tale avviso (dopo aver attivato) – Thompson

+1

In tal caso devi solo aggiungere un flag che memorizzerà se l'utente ha visitato la configurazione del plugin. Puoi salvare questo flag nella tabella '' wp_options''. – ronakg

1

Il modo corretto per aggiungere i tuoi comunicazioni è quello di eco nel vostro gancio per admin_notices azione:

function wpse8170_admin_notice(){ 
    echo '<div class="updated"><p>This is my notice.</p></div>'; 
} 
add_action('admin_notices', 'wpse8170_admin_notice'); 
+0

Ma non viene mostrato sull'attivazione del plugin come domanda. – Progrock

7

Questo è così semplice per mostrare un avviso

function your_admin_notice(){ 
echo '<div class="updated"> 
    <p>I am a little yellow notice.</p>  
</div>';  
} 
add_action('admin_notices', 'your_admin_notice'); 

Ma se si vuoi mostrare un avviso Dismiable quindi prova sotto

add_action('admin_notices', 'example_admin_notice'); 

function example_admin_notice() { 
    global $current_user ; 
     $user_id = $current_user->ID; 
     /* Check that the user hasn't already clicked to ignore the message */ 
    if (! get_user_meta($user_id, 'example_ignore_notice')) { 
     echo '<div class="updated"><p>'; 
     printf(__('This is an annoying nag message. Why do people make these? | <a href="%1$s">Hide Notice</a>'), '?example_nag_ignore=0'); 
     echo "</p></div>"; 
    } 
} 

add_action('admin_init', 'example_nag_ignore'); 

function example_nag_ignore() { 
    global $current_user; 
     $user_id = $current_user->ID; 
     /* If user clicks to ignore the notice, add that to their user meta */ 
     if (isset($_GET['example_nag_ignore']) && '0' == $_GET['example_nag_ignore']) { 
      add_user_meta($user_id, 'example_ignore_notice', 'true', true); 
    } 
} 

E se si desidera mostrare tale avviso su determinate pagine provare sotto condizione.

function my_admin_notice(){ 
    global $pagenow; 
    if ($pagenow == 'plugins.php') { 
     echo '<div class="updated"> 
      <p>This notice only appears on the plugins page.</p> 
     </div>'; 
    } 
} 
add_action('admin_notices', 'my_admin_notice'); 

You can see here

+0

Sto vedendo questo correttamente che ho bisogno di creare una funzione di richiamata per ogni messaggio che voglio visualizzare? Come creo una funzione che accetta un parametro che specifica qual è il messaggio di errore? – majikman

+0

Ok, se vuoi visualizzare un messaggio di errore, in realtà ci sono altri modi. Per visualizzare admin_notice con parametro si può provare la risposta più alta qui. Inoltre è possibile trovare una via dai link sotto http://stackoverflow.com/questions/1242328/wordpress-displaying-an-error-message-hook-admin-notices-fails-on-wp-insert-p –

0

ho sviluppato amarkal-admin-notification - uno script che consente di aggiungere/comunicazioni Admin dismissible statiche e maniglie il licenziamento per voi. Questo script è un modulo all'interno del framework WordPress di Amarkal.

Ad esempio:

amarkal_admin_notification('my-error-notice', __('Oh snap! This is an <strong>error</strong> message.','slug'), 'error'); 
Problemi correlati