2012-03-21 21 views

cevap

25

, 'admin_notices' kanca doğrudan kullanılamaz, çünkü bir yönlendirme var. Bir geçici çözüm, bildiriminizi seçenekler tablosunda saklamak ve bir dahaki sefere kontrol etmektir. Ayrıca, eklenti yükseltmelerini ve aktivasyonları da kapsamak istiyorsanız, 'admin_init' (WP 3.1, bkz. http://make.wordpress.org/core/2010/10/27/plugin-activation-hooks/) gibi başka bir kanca kullanmanız gerekecektir.

Hem etkinleştirmeyi hem de yükseltmeyi işleyen eksiksiz bir örnek eklenti. Ertelenmiş bildirimi bir dizi yaptım, böylece onları biriktirebilirsiniz.

<?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'); 
} 

GÜNCELLEME: yerine update_option() ait set_transient() kullanmak ve doğru yönetici kullanıcıya mesajların yönlendirildiği ortak bir yol bulunmaktadır. Bu mesaj endişeleri Metabokslar, aktivasyon eklentisi değil, ama teknikleri bildiğim kadarıyla, hemen hemen her yerde Dashboard da aynı şekilde çalışacaktır: https://wordpress.stackexchange.com/questions/15354/passing-error-warning-messages-from-a-meta-box-to-admin-notices

+0

Bu iyi görünüyor, benim tek yorumum yeni bir bildirim eklediğiniz kısımda KURUTMA olacaktır. – pguardiario

+0

Yep, üç satır '$ notices = get_option (...); $ Bildirimler [] = ...; update_option (..., $ notices) 'genel amaç' my_plugin_add_notice() 'işlevine göre soyutlanabilir. Bunu genellikle 'nota' ve 'hata' için bir parametre ile görürsünüz.Ardından, daha sonra yeniden oluşturma işlevi, doğru hatırlıyorsam, css sınıfı 'update' veya 'error' kullanarak, WP modasında mavi veya kırmızı bir başlık olarak görüntüler. – kitchin

3

Sadece bir <div class='updated'> kullanın. Örneğin -

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

evet, ama o zaman bu bildirimi tüm defa gösteriyor, – Thompson

+1

Bu durumda: Örneğin

Kullanıcı eklentinin yapılandırmasını ziyaret ettiğinde depolayacak bir bayrak eklemeniz yeterlidir. Bu bayrağı 'wp_options'' tablosunda saklayabilirsiniz. – ronakg

1

Bildirimlerinizi eklemek için uygun yolu admin_notices eylem için kanca onu yankı etmektir: eklenti aktivasyonlar için

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

Ancak, eklenti aktivasyonunda soru olarak görünmüyor. – Progrock

7

Bu fark ediyoruz

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

Ama eğer göstermek için çok basit Sona erdirilebilir bir Uyarı göstermek istediğinizde

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

ve bu bildirimi belirli bir sayfada göstermek istiyorsanız aşağıdaki koşulları deneyin.

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

Bunu doğru şekilde görüyorum, görüntülemek istediğim her mesaj için bir geri arama işlevi oluşturmam gerekiyor mu? Hata mesajının ne olduğunu belirten bir parametre alan bir işlevi nasıl oluşturabilirim? – majikman

+0

Tamam, hata mesajını görüntülemek istiyorsanız, aslında başka bir yol var. admin_notice parametresini parametreyle görüntülemek için buraya en fazla cevabı deneyebilirsiniz. Ayrıca, aşağıdaki bağlantılardan bir yol bulabilirsin: http://stackoverflow.com/questions/1242328/wordpress-displaying-an-error-message-hook-admin-notices-fails-on-wp-insert-p –

0

Ben amarkal-admin-notification geliştirdik - statik/kapatılabilen yönetici bildirimlerini eklemenize izin verir ve sizin için görevden işleyen bir senaryo. Bu betik Amarkal WordPress çerçevesinde bir modüldür. i (etkinleştirdikten sonra) bildirinin config linke tıklayın Bu bildirim kaybolur gibi istediğim

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