2014年5月3日 星期六

Wordpress plugin Note(1)

從來沒有寫過web framework(Wordpress),國內的資料實在太少,都是一些給外行人看的架站教學,好在國外的教學很多,不過小弟英文太差,花了一點時間才寫出了一點點簡單Hello World plugin
本篇的內容主要來自Tutorial: How to write a WordPress Plugin?的一些心得記錄!我把內容分成以下幾個部分
  • Basic
    • Plugin File & Name
    • Add action in your plugin
    • Test Hello-world plugin
  • Advanced(write plugin option page)
    • Activating/Deactivating Plugin
    • Write setting page

這篇網誌主要內容為Basic,我會在另外一篇描述Advanced的部分


Basic

Plugin File and Name

學習一個新語言或是Framework的開頭不外乎都是Hello World啦!所以事不宜遲馬上先來創建一個Hello World的資料夾在以及一個hello_world.php
創建好之後在hello_world.php加上Plugin Infomation,也就是讓wordpress認識plugin
<?php
/*
Plugin Name: Hello-World
Plugin URI: 'URL'
Description: A simple hello world wordpress plugin
Version: 1.0
Author: 'YOUR NAME'
Author URI: 'URL'
License: GPL
*/
?>
把整個hello_world資料夾上傳到server裡的wordpress資料夾(wordpress/wp-content/plugins),然後打開wordpress後台就可以看到Plugin喏

Add action in your plugin

完成上面的步驟後只是代表我們讓Wordpress知道有這個Plugin存在,此時Plugin還沒有任何功能,不過在加功能之前先來看一下兩個重要的函數
add_action($tag,$func);  
//does an action at various points of wordpress execution

add_filter($tag,$func);  
//does filtering the data 
//(eg. escaping quotes before mysql insert, or during output to browser.
剛開始看這兩個函數的時候覺得很奇怪,到底什麼是Action,什麼是Filter,上網搜尋了一下資料得到的解釋如下
  1. Action: 在特定的時候會發生某事情,例如當主頁面被載入的時候為echo Hello World
  2. Filter: 對資料庫內的資料進行修改或是截取,例如讓文章內容只顯示50個句子
總而言之Action就是在特定時候會做某件事,而Filter是對資料庫的資料進行操作。在wordpress中提供了掛鉤(hook)的機制,到底掛鉤是啥?簡單來說掛鉤的目的是要把功能掛倒Wordpress中,也就是讓Wordpress認識這個功能,所以如果要在Wordpress中增加一個Action,可以使用Wordpress提供的Action掛鉤: add_action,如果要增加一個Filter,可以使用Filter掛鉤: add_filter

解釋完掛鉤的概念之後,馬上在hello_world.php加個echo的功能

<php
add_action('init','hello_world');
function hello_world(){
   echo "Hello World";
}
?>

然後到目前使用的theme中(wp-content/themes/usingtheme)的index.php裡面加上

<?php
if(function_exists('hello_world')){
    hello_world();
}
?>

此時打開網誌就可以看到如下

很順利地看到我們我plugin成功喏!在這裏解釋一下,由於我們在plugin在show出blog page的時候已經"先"把功能掛倒Wordpress,也就是在'init'這個時間點把功能掛上去,此時當主題load進來的時候,因為整個Wordpress認識hello_world()這個function,所以這時在主題的index.php就知道hello_world()這個function啦!

最後掛鉤的時間點可以去參考codex的Plugin API/Action Reference,這部分可能要先了解一下wordpress的life cycle,不過這裡我還在研究當中,等到了解再來記錄!

沒有留言:

張貼留言