2016-07-06 91 views
2

我想在激活插件後顯示激活消息。激活WordPress插件後顯示消息

我已經看到了SO這個幾個問題,但沒有「時間正常工作:

if (!get_option("startup")) { 
    echo "<div class='updated'><h3>Welcome to [name]</h3>"; 
    update_option('startup', 'true'); 
} 

這一工程..有點。它將HTML放在最上面,甚至在<!DOCTYPE>之前。有什麼方法可以把它放在正確的地方嗎?所以在身體標籤?

+0

您是否試圖在正確的地方稱它? – SHR

回答

3

這裏有幾件事你需要做。首先,register_activation_hook() function用於鉤入您的插件的激活。並且admin_notices action用於在管理區域內添加通知(您不能在任何地方打印通知)。

但是,還有一個額外的複雜因素,因爲您在不能在插件激活時使用admin_notices操作。這是因爲WordPress不會'激活'你的插件 - 它會在後臺激活它並禁止輸出,以便在完成激活之前確保它不會觸發任何致命錯誤。

幸運的是,this blog post概述了這個問題的一個解決方案。該帖子的作者建議使用transients來保存你的插件的'狀態',以便一旦它被激活就可以恢復。

由於該博客擁有像本網站這樣的CC-BY-SA許可證,因此我會將代碼複製到此處以便繼續使用。我略微壓縮了它,以保持這篇文章的長度,但你可以通過view the whole blog post獲得完整的解決方案。我也測試過這個以確保它仍然可以正常工作 - 並且它在我安裝WordPress 4.5.3的時候也能夠正常工作。

register_activation_hook(__FILE__, 'fx_admin_notice_example_activation_hook'); 

function fx_admin_notice_example_activation_hook() { 
    set_transient('fx-admin-notice-example', true, 5); 
} 

add_action('admin_notices', 'fx_admin_notice_example_notice'); 

function fx_admin_notice_example_notice(){ 

    /* Check transient, if available display notice */ 
    if(get_transient('fx-admin-notice-example')){ 
     ?> 
     <div class="updated notice is-dismissible"> 
      <p>Thank you for using this plugin! <strong>You are awesome</strong>.</p> 
     </div> 
     <?php 
     /* Delete transient, only display this notice once. */ 
     delete_transient('fx-admin-notice-example'); 
    } 
} 
0

您可以使用'register_activation_hook($file, $function);'掛鉤輕鬆完成此操作。

function myplugin_activate() { 
    echo "<div class='updated'><h3>Welcome to [name]</h3>"; 
} 
register_activation_hook(__FILE__, 'myplugin_activate'); 
+0

這不會像這樣工作 - 它會生成一個'插件生成意外輸出'的錯誤,並不會顯示消息。您還需要使用'admin_notices'鉤子,但是這樣做有一些額外的複雜性,不適用於插件激活。我會添加一個答案。 –

+1

謝謝:)爲您的答案+1了 – Farkie