原文出自:更多相關資訊,請閱讀原文javascript
使用了一段時間的wordpress , 發現不少功能須要本身寫。因而,就開始了學習怎麼在wp上面編寫一款插件,
在這裏和你們分享下。純屬新手製做。不妥之處,敬請指教。
php
首先;製做wp插件須要注意一下幾點css
給你的插件起個有意義的名字,讓人一看就知道你的插件是作什麼用的。這個名字最好是惟一的,由於網絡上不少wp 插件,爲了區分哪一個是你的做品,你最好給它起個‘特殊’的名字html
在插件的代碼裏面最好包含詳細的註釋,這樣對你之後維護起這個插件是很是有利的,並且,若是你的做品是優秀的,不少人會渴望能讀懂你的代碼,甚至在你的代碼上面二次開發,這時你的代碼註釋就顯得十分重要。java
對wp還有人用的版本測試一遍。以兼容多個版本。數據庫
在wp-content/plugins 目錄下新建一個文件夾,以你的插件名字命名瀏覽器
目錄中能夠有各類的css javascript html 圖片 等等文件,可是最主要的仍是要有一個主php文件網絡
插件的主文件頂部必須包括一個標準插件信息頭。WordPress經過標準信息頭識別插件的存在,並把她加入到控制面板的插件管理頁面,這樣插件才能激活,載入插件,並運行裏面的函數;若是沒有信息頭,插件將沒法激活和使用。標準信息插件頭的格式爲:app
<?php /* Plugin Name: 插件名 Plugin URI: 插件的介紹或更新地址 Description: 插件描述 Version: 插件版本,例如 1.0 Author: 插件做者名稱 Author URI: 插件做者的連接 License: A "Slug" license name e.g. GPL2 */ ?>
標準信息頭至少要包括插件名稱,這樣WordPress才能識別你的插件。其餘信息將顯示在控制面板插件管理頁面中。標準插件信息對各行順序沒有要求。編輯器
這樣的升級機制可以正確地讀出你的插件版本,建議你選擇一個格式的版本號,不一樣版本之間,並堅持下去。例如,x.x中或x.x.x或xx.xx.xxx
注意:文件必須是 UTF-8 格式!
若是你想將你的插件發佈到http://wordpress.org/extend/plugins/, 你必須在插件包中創建一個標準格式的readme.txt文件. 文件格式參見http://wordpress.org/extend/plugins/about/readme.txt.
你能夠訪問http://wordpress.org/extend/plugins/about/readme.txt 查看如何去格式化自述文件,或者訪問http://generatewp.com/plugin-readme/ 來使用文檔×××
須要注意的是,WordPress是經過自述文件來判斷這個插件是處於「必要」仍是「測試」狀態的。
一般咱們還要用一個LICENSE.txt 插件的許可證信息。大多數插件使用GPL或GPLCompatibleLicenses許可。若是使用GPL許可,能夠參考下一個標準的LICENSE 怎麼寫
咱們的插件通常須要用一個或多個wordpress 的鉤子來關聯咱們的插件到wordpress核心程序中去,來完成咱們插件實現的功能,插件鉤子的運行機理是,當WordPress運行到不一樣階段,WordPress會檢查當前階段是否註冊了插件函數,若是是,那麼函數將被執行。經過執行插件函數改變了WordPress的默認功能。
好比咱們作一個在文章最後面添加一個文章的版權信息時。wordpress程序將文章顯示到瀏覽器前會檢查是否有插件註冊了一個名字爲 the_content的鉤子。若是有的話,那麼。就會將文章傳遞到這個鉤子的回調函數中去。那麼,咱們能夠在這個回調函數中處理這個文章,在文章的最後面添加一行咱們的版權信息。從而實現咱們插件功能。
wordpress 核心鉤子插件有兩個。
add_action ($hookname, $callbackfunction) add_filter ($hookname,$callbackfunction)
其中$hooknane 是鉤子的名字。在須要用到這個鉤子的地方使用,如 the_content();
$callbackfunction 回調函數名。實現這個鉤子功能的函數
來看看這兩個核心功能的定義
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority); $wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args); unset( $merged_filters[ $tag ] ); return true; }
至於add_action 彷佛和add_filter 沒有什麼區別,只是返回了add_filter函數,並無添加什麼新的處理。
function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { return add_filter($tag, $function_to_add, $priority, $accepted_args); }
add_action 和 add_filter 函數的調用
<?php add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1); ?>
參數:
$tag
(字符串)(必需)鏈接到$function_to_add的過濾器名稱
默認值:None
$function_to_add
(回調)(必需)應用過濾器時被調用函數的名稱
默認值:None
$priority
(整數)(可選)用於規定函數被執行的順序,函數與特定動做關聯。較小的數字匹配較早的執行,同等優先級的函數按加入action的順序被執行。
默認值:10
$accepted_args
(整數)(必需)函數所接受參數的數量。在WordPress 1.5.1及以後版本中,鏈接的函數可吸取其它在調用do_action() 或 apply_filters()時設置的參數。
默認值:None
用戶還須要爲過濾器回調時函數的命名空間提供一個指示器,如:
<?php add_filter(‘media_upload_newtab’, array(&$this, ’media_upload_mycallback’)); ?>
好,主要功能函數就介紹到這裏。接下來,用代碼編輯器打開copyright.php 文件
編寫版權信息
<?php /* Plugin Name: cheongkinpui-first-plugins Plugin URI: http://www.smaij.com/plugins/ Description: 這裏是插件的說明文字 Version: 1.0.0 Author: 張仔 Author URI: http://www.smaij.com/ License: GPL */ ?>
保存文件後,在wordpress 後臺能夠自動檢測到插件
點擊啓用。你的插件就開始工做了。
到這裏,一個wordpress插件正常工做了,可是他沒有提供任何功能
而咱們要讓他實如今每一篇文章後面添加上文章的版權信息。
這個插件須要實現兩個功能
插件自動爲每一個單篇閱讀的文章最後面添加文章版權信息
插件要在後臺能夠自定義輸出的版權信息
首先。當用戶啓用插件,後臺功能欄中須要顯示這個插件設置
用戶停用插件時則移除這個設置項
使用 wordpress 的 register_activation_hook 和 register_deactivation_hook 函數
這樣。咱們啓用這個插件的時候,就會想數據庫插入一個記錄。記錄着默認的版權文字信息
插件還要求能夠在後臺更改這個版權信息的。
要實現這個,添加如下代碼
/* 註冊 激活插件時調用函數*/ register_activation_hook(__FILE__,'install_copyright'); /* 註冊 停用插件時調用函數*/ register_deactivation_hook(__FILE__,'remove_copyright'); //激活調用函數 function install_copyright(){ //添加到數據庫中去 add_option("copyright_text","<p class='copyright'>轉載註明出處</p>",'','yes'); } //停用調用函數 function remove_copyright(){ // 刪除 wp_options 表中的copyright_text對應記錄 delete_option('copyright_text'); } //判斷是後臺管理頁面 if( is_admin() ){ //添加wp 後臺菜單。使用 add_action('admin_menu','copyright_menu'); } function copyright_menu(){ /* 頁名稱,菜單名稱,訪問級別,菜單別名,點擊該菜單時的回調函數(用以顯示設置頁面) */ add_options_page('設置版權信息','版權信息','administrator','顯示博客版權信息','copyright_html'); } function copyright_html(){ ?> <div> <h2>設置博客版權信息</h2> <form method='post' action='options.php'> <?php wp_nonce_field('update-options'); ?> <p> <textarea name="copyright_text" id="copyright_text" cols="40" rows="6"> <?php echo get_option('copyright_text'); //讀取數據庫中的原版權文章 ?> </textarea> </p> <input type="hidden" name="action" value="update" /> <input type="hidden" name="page_options" value="copyright_text" /> <input type="submit" value="保存" class="button-primary" /> </form> </div> <?php } //添加掛鉤the_content add_filter( 'the_content' , 'display_copyright' ); /*hook 傳入 文章內容, *在文章內容後面添加copyright *輸出新的content **/ function display_copyright($content){ //判斷是不是單頁中的 if( is_single() ) //get_option('copyright_text') 從數據庫中取出copyright 信息 $content .= get_option('copyright_text'); return $content; } ?>
這樣,在文章單頁中就可以顯示版權信息了
也能夠在後臺設置要顯示的文字信息了。