wordpress開發(fā)之插件開發(fā)初識(wordpress插件開發(fā)基礎)

首先,你要在wp-content/plugins/下建立一個文件夾,文件夾的名字最好只由字母、數(shù)字、“-”和下滑組成。同時,還要在這個文件夾下建立一個同名的php文件。比如你的文件夾名字為my-plugin,則php的名字就是my-plugin.php,這個文件做為你plugin的主文件,像主題文件的sytle.css文件一樣,它的頭部包含了對這個插件的描述信息。下面是一個簡單的例子:
< ?php
/*
Plugin Name: 插件名稱
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: 插件的簡單描述
Version: 插件版本號, 例如: 1.0
Author: 插件作者
Author URI: http://URI_Of_The_Plugin_Author作者地址
*/
?>
另外如果你想要把你的插件提交到wordpress.org上,你還要在文件夾中添加一個readme.txt文件。就像主題中的style.css文件一樣。類似的,readme.txt的頭部包含了對這個插件的基本描述信息。關于readme.txt的格式,可以參考WordPress的官方示例。因為這里只是簡單的寫一個可用的Plugin,就不介紹reaadme.txt了。
WordPress的插件其實就是一堆php的方法。這些方法通過調用系統(tǒng)自帶的鉤子來為博客增加新的功能。下面我們就來看一下什么是系統(tǒng)的鉤子。
插件鉤子
WordPress定義了很多不同用途的鉤子,在Wordpress運行的不同階段,它會檢測當前階段是否注冊了鉤子函數(shù),如果有,則優(yōu)先執(zhí)行這些函數(shù)。添加filter的方法如下:
add_fitler的四個參數(shù)分別是:要掛載的鉤子的名稱,鉤子的回調函數(shù),回調函數(shù)的優(yōu)先級,回調函數(shù)的參數(shù)個數(shù)。一個例子如下:
add_fitler('the_title', 'my_title', 10, 2);
function my_title($title, $id) {
return News:$title;
}
這個例子中,我們在the_title鉤子上掛載了一個my_title的函數(shù),這個函數(shù)接受兩個參數(shù),每別是文章的標題和ID,當Wordpress要把文章post給瀏覽器之前,會首先調用到這個函數(shù),在這里,我們在每個文章的標題前加了一個“News:”。
關于Wordpress所提供的所有鉤子,可以參考Wordpress的官網文檔:Filter Reference。
另外你可能會在某些文章中看到令一個添加鉤子的函數(shù)add_action。我們來看一下wordpress的內核你或許就明白了:
function add_action($tag, $function_to_add, $priority = 10, $accept_args = 1) {
return add_filter($tag, $function_to_add, $priority, $accept_args);
}
所以add_action和add_filter本質上沒有任何區(qū)別。
之前說過,Wordpress會在系統(tǒng)的不同階段調用不同的鉤子,其實,如果需要,你也可以在你的代碼里手動調用這些鉤子。方法如下:
$return_values = apply_filtere('filter_name', $args ... );
有了這些filter,你就可以在wordpress處理流程中的任意地方修改數(shù)據(jù)內容,實現(xiàn)插件所需要的功能。
Option機制
僅僅有了filter還不夠,很多插件還需要保存一些信息,比方插件的屬性設置之類,這個時候你就要用到Wordpress的Option機制了。
WordPress的Option機制通過add_option,get_option, update_option三個函數(shù)來實現(xiàn),三個函數(shù)的定義如下:
add_option($name, $value, $deprecated, $autoload);
get_option($name);
update_option($option_name, $newvalue);
add_option有4個參數(shù),功能分別如下:
$name:必選,變量名
$value:可選,變量值,默認為空字符
$deprecated:沒用的參數(shù),純粹是歷史遺留問題。留著它只是為了兼容以有的插件。當然如果你要調用到后面的$autoload,你需要為它傳入一個空字符或null。
$autoload: “yes” or “no”,默認是”yes”,當設為”yes”時,該屬性會在wp_load_alloptions調用時獲取到。
get_option用來獲取你添加的參數(shù),同時系統(tǒng)中已經默認定義了一些參數(shù),你可以參考Wordpress的官方列表:Option Refernce。
而update_option則是用來更新option。
三個方法都比較好理解,我也不多說了。通過這三個方法你可以把你需要長久保存的數(shù)據(jù)放在數(shù)據(jù)庫中。
設置頁面
有了filter和option,我們已經完成了一個插件的核心工作。不過做為一個插件,它經常還需要為用戶提供一個設置頁面,也就是在Wordpress后臺插件列表中所看到的settings鏈接,如下圖:
settings
這里我們用一個最簡單的例子還說明如何添加一個設置頁面:
<?php class wctest{
public function __construct(){
if(is_admin()){
add_action('admin_menu', array($this, 'add_plugin_page'));
add_action('admin_init', array($this, 'page_init'));
}
}
public function add_plugin_page(){
// This page will be under "Settings"
add_options_page('Settings Admin', 'Settings', 'manage_options', 'test-setting-admin', array($this, 'create_admin_page'));
}
public function create_admin_page(){
?>
<div>
< ?php screen_icon(); ?>
<h2>Settings</h2>
<form method=”post” action=”options.php”>
< ?php
// This prints out all hidden setting fields
settings_fields(‘test_option_group’);
do_settings_sections(‘test-setting-admin’);
?>
< ?php submit_button(); ?>
</form>
</div>
< ?php
}
public function page_init(){
register_setting(‘test_option_group’, ‘array_key’, array($this, ‘check_ID’));
add_settings_section(
‘setting_section_id’,
‘Setting’,
array($this, ‘print_section_info’),
‘test-setting-admin’
);
add_settings_field(
‘some_id’,
‘Some ID(Title)’,
array($this, ‘create_an_id_field’),
‘test-setting-admin’,
‘setting_section_id’
);
}
public function check_ID($input){
if(is_numeric($input['some_id'])){
$mid = $input['some_id'];
if(get_option(‘test_some_id’) === FALSE){
add_option(‘test_some_id’, $mid);
}else{
update_option(‘test_some_id’, $mid);
}
}else{
$mid = ”;
}
return $mid;
}
public function print_section_info(){
print ‘Enter your setting below:’;
}
public function create_an_id_field(){
?><input type=”text” id=”input_whatever_unique_id_I_want” name=”array_key[some_id]” value=”<?=get_option(‘test_some_id’);?/>” />< ?php
}
}
$wctest = new wctest();
上面創(chuàng)建的類會在你的Wordpress后臺添加一個新頁面,同時它允許用戶保存一個id值。
到這里,我們一個簡單的Wordpress插件就完成了。雖然這個插件本身沒有什么用途。謝謝大家。
相關文章
CyberPanel安裝WordPress并配置偽靜態(tài)規(guī)則
下面教你如何在 CyberPanel安裝WordPress以及配置偽靜態(tài),需要的朋友可以參考下2023-12-27- 這篇文章主要介紹了wordpress無法安裝更新主題插件的解決辦法,需要的朋友可以參考下2020-12-27
WordPress必備數(shù)據(jù)庫SQL查詢語句整理
發(fā)現(xiàn)幾條比較實用的,適合 WordPress 實用的SQL語句。于是就趕緊收集分享出來了,需要的朋友可以參考下2017-09-23wordpress在安裝使用中出現(xiàn)404、403、500及502問題的分析與解決方法
wordpress是很多新手站長搭建個人博客最喜愛的程序,但是最近在使用WordPress的時候遇到了一些問題,所以想著將遇到問題總結分享出來,下面這篇文章主要給大家介紹了關于wo2017-08-11WordPress取消英文標點符號自動替換中文標點符號的優(yōu)雅方法
這篇文章主要介紹了WordPress取消英文標點符號自動替換中文標點符號的優(yōu)雅方法,需要的朋友可以參考下2017-04-04- 這篇文章主要給大家介紹了wordpress自定義上傳文件類型的方法,如WordPress默認允許上傳 .exe 后綴名的可運行文件,那么我們怎么禁止用戶在WordPress后臺發(fā)表文章時上傳 .e2016-12-19
- 大家可能發(fā)現(xiàn)了當實現(xiàn)了前端用戶中心,后臺控制面板就失去了作用,那么限制其他用戶進入后臺控制面板就很有必要了!那么我們要怎么做呢?通過下面這篇文章分享的方法后,只2016-12-19
WordPress實現(xiàn)回復文章評論后發(fā)送郵件通知的功能
這篇文章主要介紹了WordPress實現(xiàn)回復文章評論后發(fā)送郵件通知的功能,涉及wordpress針對評論與郵件的相關操作技巧,需要的朋友可以參考下2016-10-11WordPress使用自定義文章類型實現(xiàn)任意模板的方法
這篇文章主要介紹了WordPress使用自定義文章類型實現(xiàn)任意模板的方法,可通過自定義文章類型來實現(xiàn)任意模版的使用,具有一定參考借鑒價值,需要的朋友可以參考下2016-10-11WordPress后臺地址被改導致無法登陸后臺的簡單解決方法
這篇文章主要介紹了WordPress后臺地址被改導致無法登陸后臺的簡單解決方法,簡單分析了后臺無法登陸的原因與相應的解決方法,涉及針對wordpress配置項的簡單修改,需要的朋友2016-10-11