小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

定制WordPress插件管理菜單

 天中仙 2012-03-30

簡介

目前市面上有很多插件能夠讓用戶自行對(duì)插件進(jìn)行設(shè)置。插件開發(fā)人員可以通過幾種方法來實(shí)現(xiàn)插件的這一功能。其中一個(gè)方法就是,允許用戶編輯插件的PHP文件,但很多用戶并不適應(yīng)這種方式(這是比較禮貌的說法)。因此,插件開發(fā)人員可以為用戶創(chuàng)建一個(gè)插件管理界面,讓用戶能夠以更自然更熟悉的方式設(shè)置插件。

本文首先假設(shè)讀者對(duì)編寫插件的基本知識(shí)以及動(dòng)作和過濾器的插件API有一定了解,在此基礎(chǔ)上向讀者說明怎樣在WordPress中為插件添加自定義管理界面。

Hook鉤子

要添加管理菜單,首先要進(jìn)行以下三項(xiàng)操作:

  1. 創(chuàng)建一個(gè)函數(shù),函數(shù)中包含創(chuàng)建菜單的代碼
  2. 用“admin_menu”動(dòng)作鉤子記錄上述函數(shù)
  3. 為(點(diǎn)擊菜單項(xiàng)后需要顯示的)頁面編寫HTML代碼

將代碼存儲(chǔ)在主插件php文件或獨(dú)立的php包含文件中。

插件開發(fā)新手經(jīng)常會(huì)忽略第二個(gè)操作。我們不能直接調(diào)用菜單代碼,必須要將代碼放入某個(gè)函數(shù),然后再記錄這個(gè)函數(shù)。

下面是一個(gè)關(guān)于以上三項(xiàng)操作的簡單實(shí)例:

<?php
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
 add_options_page('My Plugin Options', 'My Plugin', 8, 'your-unique-identifier', 'my_plugin_options');
}
function my_plugin_options() {
 echo '< div class="wrap">';
 echo '< p>Here is where the form would go if I actually had options.</p>';
 echo '</div>';
}
?>

這個(gè)例子用my_plugin_menu函數(shù)為管理菜單添加新條目(通過add_options_page函數(shù),下文中有介紹)。然后調(diào)用 WordPress的鉤子來“登記”這個(gè)函數(shù)。如果不調(diào)用鉤子,激活插件時(shí)WordPress會(huì)拋出“函數(shù)未定義”PHP錯(cuò)誤。最后創(chuàng)建出一個(gè)函數(shù),函數(shù) 中含有點(diǎn)擊菜單選項(xiàng)后將要顯示的頁面(以及需要操作的PHP代碼)。

下面會(huì)介紹到后兩步的實(shí)際操作過程。不要忘記在函數(shù)中圍繞這兩步操作,然后調(diào)用admin_menu鉤子開始操作。

菜單和子菜單

創(chuàng)建自定義管理界面前,我們需要斷定該管理界面屬于WordPress管理菜單系統(tǒng)的哪個(gè)部分。大多數(shù)插件將自己的管理界面作為子菜單項(xiàng),放在WordPress已有的頂級(jí)菜單下。下面分別介紹各個(gè)頂級(jí)菜單:

設(shè)置

該菜單顯示只有管理員可見的插件設(shè)置(參見創(chuàng)建設(shè)置/選項(xiàng)頁面

插件

該菜單顯示插件管理的相關(guān)控件,而非插件本身的配置設(shè)置

外觀

該菜單顯示用以管理主題/樣式文件、工具欄等內(nèi)容的相關(guān)控件

寫日志

該菜單顯示用以編輯日志/頁面的工具

用戶

該菜單顯示用于管理用戶的控件

如果我們開發(fā)的插件對(duì)WordPress來說是個(gè)新概念,完全異于其它插件,并且需要很多頁面來實(shí)現(xiàn)這個(gè)插件,那么我們可以為插件創(chuàng)建一個(gè) 頂級(jí)菜單。不過之前一定要確定,我們的確需要多個(gè)相關(guān)頁面來實(shí)現(xiàn)插件的功能,并且這功能是WordPress本身不具備的。類似插件可能包括圖庫管理插 件、數(shù)據(jù)庫管理插件以及會(huì)議管理插件等。

在自定義管理菜單插件的幫助下,用戶可以自己決定插件是否出現(xiàn)在頂級(jí)菜單選項(xiàng)中——插件開發(fā)人員需要向用戶表明自己所開發(fā)的插件可以進(jìn)行此類設(shè)置,尤其是那些決定創(chuàng)建頂級(jí)菜單項(xiàng)的開發(fā)人員。

管理菜單相關(guān)函數(shù) 決定好在什么位置添加管理菜單/子菜單后,接著就應(yīng)該讓W(xué)ordPress知道新頁面的存在了。我們會(huì)在'admin_menu' 動(dòng)作函數(shù)(見本段最后部分的示例)中完成通知過程。

頂級(jí)菜單

出于某些原因,我們可能會(huì)決定讓自己開發(fā)的插件使用一個(gè)新的頂級(jí)菜單。首先我們要?jiǎng)?chuàng)建菜單,否則插件會(huì)自動(dòng)轉(zhuǎn)入子菜單中。

我們需要用add_menu_page函數(shù)來添加新的頂級(jí)菜單:

add_menu_page(page_title, menu_title, access_level/capability, file, [function], [icon_url]);

參數(shù)值:

page_title

激活菜單后,出現(xiàn)在頁面上的HTML頁面標(biāo)題

menu_title

(顯示在屏幕上的)菜單名

access_level/capability

(顯示并使用該菜單頁所需要的)最低用戶級(jí)別或權(quán)限

file

PHP文件,處理菜單頁所顯示的內(nèi)容

function

為菜單頁顯示頁面內(nèi)容的函數(shù)

從技術(shù)層面上來說,function參數(shù)是可選的,但如果不采用該參數(shù),WordPress會(huì)認(rèn)為包含PHP文件就可以生成管理頁面,于是不再調(diào)用函數(shù)。大多數(shù)插件開發(fā)人員都會(huì)將生成頁面的代碼放在主插件文件的函數(shù)中。

icon_url

該參數(shù)僅用于WordPress 2.7。參數(shù)在菜單中加入一個(gè)自定義圖標(biāo)。

子菜單

對(duì)頂級(jí)菜單定義完畢或決定使用某個(gè)已有的WordPress頂級(jí)菜單后,我們用 add_submenu_page函數(shù)來定義子菜單頁面。添加頁面時(shí),請(qǐng)按照自己希望的頁面顯示順序進(jìn)行添加。

add_submenu_page(parent, page_title, menu_title, access_level/capability, file, [function]);

參數(shù)值:

parent

核心WordPress管理文件的文件名,該文件為我們提供所有頂級(jí)菜單,我們可以在頂級(jí)菜單中加入我們的子菜單,也可以在自定義頂級(jí)菜單的子菜單下加入插件文件。

常用示例:

  1. 用于編輯日志:add_submenu_page('post-new.php',...)
  2. 用于管理:add_submenu_page('edit.php',...)
  3. 用于設(shè)計(jì):add_submenu_page('themes.php',...)
  4. 用于評(píng)論:add_submenu_page('edit-comments.php',...)
  5. 用于設(shè)置:add_submenu_page('options-general.php',...)
  6. 用于插件:add_submenu_page('plugins.php',...)
  7. 用于用戶設(shè)置:add_submenu_page('users.php',...)

page_title

激活子菜單后,出現(xiàn)在頁面上的HTML頁面標(biāo)題

menu_title

(顯示在屏幕上的)子菜單名

access_level/capability

(顯示并使用該子菜單頁所需要的)最低用戶級(jí)別或權(quán)限

file

對(duì)現(xiàn)有的WordPress菜單來說,file參數(shù)值為:處理菜單頁所顯示的內(nèi)容的PHP文件。對(duì)自定義的頂級(jí)菜單的子菜單來說,file參數(shù)值為:該子菜單頁的唯一標(biāo)識(shí)符。

若某插件創(chuàng)建出屬于自己的頂級(jí)菜單,正常情況下其首個(gè)子菜單的鏈接標(biāo)題與頂級(jí)菜單相同。因此我們設(shè)置首個(gè)子菜單鏈接標(biāo)題時(shí)只需要復(fù)制頂級(jí)菜 單的鏈接。parent參數(shù)和file參數(shù)首次被賦予相同值時(shí),我們可以通過調(diào)用add_submenu_page函數(shù)來避免復(fù)制鏈接標(biāo)題。

function

為菜單頁顯示頁面內(nèi)容的函數(shù)

從技術(shù)層面上來說,在add_menu_page函數(shù)中,function參數(shù)是可選的。但如果不采用該參數(shù),WordPress會(huì)認(rèn)為包含PHP文件就可以生成管理頁面,于是不再調(diào)用函數(shù)。大多數(shù)插件開發(fā)人員都會(huì)將生成頁面的代碼放在主插件文件的函數(shù)中。

下面的例子向我們展示了在子菜單頁標(biāo)題異于頂級(jí)菜單頁時(shí),如何插入頂級(jí)菜單頁和子菜單頁。在這個(gè)例子中,用以顯示第一個(gè)子菜單頁的函數(shù)是'my_magic_function':

add_menu_page('Page title', 'Top-level menu title', 8, __FILE__, 'my_magic_function');
add_submenu_page(__FILE__, 'Page title', 'Sub-menu title', 8, __FILE__, 'my_magic_function');

大多數(shù)子菜單都會(huì)進(jìn)入WordPress的設(shè)置、管理、外觀菜單,因此WordPress專門給出三個(gè)包裝器函數(shù),簡化這些菜單頁添加子菜單的過程:

用于“設(shè)置”頂級(jí)菜單

add_options_page(page_title, menu_title, access_level/capability, file, [function]);  

用于“管理”菜單

add_management_page(page_title, menu_title, access_level/capability, file, [function]);  

用于“外觀”菜單

add_theme_page( page_title, menu_title, access_level/capability, file, [function]);  

插入頁面

下面是一個(gè)能將新菜單項(xiàng)插入不同位置的WordPress插件示例:

<?php
/*
Plugin Name: Menu Test
Plugin URI: http://
Description: Menu Test
Author: Nobody
Author URI: http://
*/
// Hook for adding admin menus
add_action('admin_menu', 'mt_add_pages');
// action function for above hook
function mt_add_pages() {
   // Add a new submenu under Options:
   add_options_page('Test Options', 'Test Options', 8, 'testoptions', 'mt_options_page');
   // Add a new submenu under Manage:
   add_management_page('Test Manage', 'Test Manage', 8, 'testmanage', 'mt_manage_page');
   // Add a new top-level menu (ill-advised):
   add_menu_page('Test Toplevel', 'Test Toplevel', 8, __FILE__, 'mt_toplevel_page');
   // Add a submenu to the custom top-level menu:
   add_submenu_page(__FILE__, 'Test Sublevel', 'Test Sublevel', 8, 'sub-page', 'mt_sublevel_page');
   // Add a second submenu to the custom top-level menu:
   add_submenu_page(__FILE__, 'Test Sublevel 2', 'Test Sublevel 2', 8, 'sub-page2', 'mt_sublevel_page2');
}
// mt_options_page() displays the page content for the Test Options submenu
function mt_options_page() {
   echo "< h2>Test Options</h2>";
}
// mt_manage_page() displays the page content for the Test Manage submenu
function mt_manage_page() {
   echo "< h2>Test Manage</h2>";
}
// mt_toplevel_page() displays the page content for the custom Test Toplevel menu
function mt_toplevel_page() {
   echo "< h2>Test Toplevel</h2>";
}
// mt_sublevel_page() displays the page content for the first submenu
// of the custom Test Toplevel menu
function mt_sublevel_page() {
   echo "< h2>Test Sublevel</h2>";
}
// mt_sublevel_page2() displays the page content for the second submenu
// of the custom Test Toplevel menu
function mt_sublevel_page2() {
    echo "< h2>Test Sublevel 2</h2>";
}
?>

菜單頁面樣例

上面的例子中含有幾個(gè)虛構(gòu)函數(shù),例如mt_options_page等,這些虛構(gòu)函數(shù)可以作為實(shí)際頁面內(nèi)容的占位符。我們要將這些占位符轉(zhuǎn)換為真正 的菜單頁面。首先假設(shè)插件有一個(gè)名為mt_favorite_food的選項(xiàng),然后讓網(wǎng)站主人在插件的設(shè)置頁面中輸入自己最喜歡的食物。 mt_options_page函數(shù)需要在界面上輸入一張數(shù)據(jù)輸入表才能激活mt_favorite_food并處理輸入的數(shù)據(jù)。下面有一個(gè)函數(shù)可以幫助 mt_options_page完成以上任務(wù):

// mt_options_page() displays the page content for the Test Options submenu
function mt_options_page() {
   // variables for the field and option names 
   $opt_name = 'mt_favorite_food';
   $hidden_field_name = 'mt_submit_hidden';
   $data_field_name = 'mt_favorite_food';
   // Read in existing option value from database
   $opt_val = get_option( $opt_name );
   // See if the user has posted us some information
   // If they did, this hidden field will be set to 'Y'
   if( $_POST[ $hidden_field_name ] == 'Y' ) {
       // Read their posted value
       $opt_val = $_POST[ $data_field_name ];
       // Save the posted value in the database
       update_option( $opt_name, $opt_val );
       // Put an options updated message on the screen
?>
< div class="updated">

<?php _e('Options saved.', 'mt_trans_domain' ); ?>

</div>
<?php
   }
   // Now display the options editing screen
   echo '< div class="wrap">';
   // header
   echo "< h2>" . __( 'Menu Test Plugin Options', 'mt_trans_domain' ) . "</h2>";
   // options form
   ?>
< form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
< p><?php _e("Favorite Color:", 'mt_trans_domain' ); ?> 
<input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" size="20">
</p>< hr />
< p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options', 'mt_trans_domain' ) ?>" />
</p>
</form>
</div>
<?php

注意事項(xiàng):

  • WordPress管理函數(shù)會(huì)對(duì)用戶進(jìn)行驗(yàn)證,因此我們無需擔(dān)心函數(shù)的驗(yàn)證功能
  • 上面的函數(shù)樣例已經(jīng)國際化——詳細(xì)信息參見插件開發(fā)的“插件國際化”部分
  • 函數(shù)會(huì)在數(shù)據(jù)被輸入數(shù)據(jù)輸入表前,對(duì)數(shù)據(jù)進(jìn)行處理,因此出現(xiàn)在數(shù)據(jù)輸入表中的數(shù)據(jù)都是經(jīng)過處理的新值(而不是數(shù)據(jù)庫中的值)。
  • 即使第一次進(jìn)行操作也不必?fù)?dān)心,如果某個(gè)設(shè)置選擇不存在,WordPress update_option函數(shù)能夠自動(dòng)在數(shù)據(jù)庫中加入選項(xiàng)。
  • 每次轉(zhuǎn)入管理頁面時(shí)WordPress都會(huì)解析以上管理菜單定制過程。因此如果我們編寫的插件沒有設(shè)置頁面,打算稍后添加時(shí),可以根據(jù) 本文介紹的定制過程進(jìn)行操作、修改,直到完全滿意。換句話說,我們創(chuàng)建的管理菜單不是“永久性”的,所有菜單都會(huì)被即時(shí)解析,我們可以隨時(shí)添加或除去某個(gè) 菜單項(xiàng),重新加載頁面后,我們所做的改動(dòng)會(huì)立刻顯示在頁面上。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多