Sto tentando di visualizzare un avviso nel pannello di amministrazione, quando si attiva il plug-in di prova. Come posso visualizzarlo? Qualcuno conosce questo metodo?WordPress: come visualizzare la notifica nel pannello di amministrazione, sull'attivazione del plug-in?
risposta
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
Basta usare uno <div class='updated'>
. Per esempio -
echo "<div class='updated'>Test Plugin Notice</div>";
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
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
È possibile utilizzare i nuovi avvisi di amministrazione per creare quelli che vengono chiamati i puntatori di amministrazione utilizzando show_wp_pointer_admin_bar
.
Linky: http://wpengineer.com/2272/how-to-add-and-deactivate-the-new-feature-pointer-in-wordpress-3-3/
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');
Ma non viene mostrato sull'attivazione del plugin come domanda. – Progrock
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');
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
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 –
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');
Questo sembra buono, il mio unico commento sarebbe quello di ASCIUGARE la parte in cui si aggiunge un nuovo avviso. – pguardiario
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