[WP-Plugin]Sidebar Widget 基礎架構(wp-plugin-base.php)
八月 27, 2008
本文利用 wp-plugin-base.php 簡單介紹 wordpress plugin 的架構。
- 前台產生標準 widget 的外觀,內容則是印出設定值。
- 後台 widget 設定介面,可以修改設定值。
- 沒有直接(使用 SQL )變更資料庫。
plugin 基本資料
請參考下圖:
程式碼
<?php
/*
Plugin Name: widget_name
Plugin URI: 網址
Version: 0.1 (版本)
Description: 說明文字
Author: klcintw(作者)
*/
/* 版權宣告 */
/* 常數宣告 */
$_X_WIDGET_NAME = "widget_name"; // 顯示在後台的 widget 名稱
$_X_WIDGET_ID = "widget_id"; // 程式用 widget id
$_X_OPTIONS_KEY = 'myWidgetOptions'; // 設定存到資料庫的識別鍵
$_X_OPTIONS_WIDTH = 300; // 後台設定的寬度
$_X_OPTIONS_HEIGHT = 200; // 後台設定的高度
$_X_OPTIONS_DEFAILT['title'] = 'TITLE';
$_X_OPTIONS_DEFAILT['int'] = 123;
### Function: 起始Widget
function widget_X_init() {
if (!function_exists('register_sidebar_widget')) return;
### Function: 功能
function widget_content($args) {
// 將 $args 陣列的資訊展開
extract($args);
/* 可用 arg 清單:
$before_widget => <li id="widget_name" class="widget widget_content">
$after_widget => </li>
$before_title => <h2 class="widgettitle">
$after_title => </h2>
$name => 側邊欄 1
$id => sidebar-1
$widget_id => widget_name // register_sidebar_widget
$widget_name => widget_name // register_sidebar_widget
*/
// 取得設定值
$options = GET_OPTIONS();
// 輸出前台UI
echo $before_widget;
echo $before_title . $options[title] . $after_title;
echo '<pre>';
print_r($options);
echo '</pre>';
echo $after_widget;
} // function
### Function: 設定
function widget_options() {
global $_X_OPTIONS_KEY, $_X_WIDGET_ID;
$options = GET_OPTIONS();
if ($_POST[$_X_WIDGET_ID.'_is_postback']) {
// 讀取新設定值
$options['title'] = strip_tags($_POST[$_X_WIDGET_ID.'_title']);
$options['int'] = intval($_POST[$_X_WIDGET_ID.'_int']);
update_option($_X_OPTIONS_KEY, $options);
} // if
/* 設定畫面 */
echo '
<p><label for="'.$_X_WIDGET_ID.'_title">標題:</label><input type="text" name="'.$_X_WIDGET_ID.'_title" value="'.$options['title'].'" /></p>
<p><label for="'.$_X_WIDGET_ID.'_int">數字:</label><input type="text" name="'.$_X_WIDGET_ID.'_int" value="'.$options['int'].'" /></p>
<input type="hidden" name="'.$_X_WIDGET_ID.'_is_postback" id="is_postback" value="1" />
';
} // function
### Helper Function : 取得設定
function GET_OPTIONS() {
global $_X_OPTIONS_KEY, $_X_OPTIONS_DEFAILT;
$options = get_option($_X_OPTIONS_KEY);
if (!is_array($options)) {
$options = $_X_OPTIONS_DEFAILT;
} // if
return $options;
}
/* 註冊 Widget */
global $_X_WIDGET_NAME,$_X_OPTIONS_WIDTH,$_X_OPTIONS_HEIGHT;
register_sidebar_widget($_X_WIDGET_NAME, 'widget_content');
register_widget_control($_X_WIDGET_NAME, 'widget_options',$_X_OPTIONS_WIDTH, $_X_OPTIONS_HEIGHT);
} // function
/* 加入WP系統 */
//add_action('wp_head', 'AddScriptOrCss');
add_action('plugins_loaded', 'widget_X_init');
?>
註冊及登記
- add_action(‘plugins_loaded’, ‘widget_X_init’);
將 widget_X_init 註冊到 WP 系統中,在 plugins_loaded 的事件中呼叫執行。 - register_sidebar_widget($_X_WIDGET_NAME, ‘widget_content’);
向 WP 系統登記這個 plugin 支援 widget,其內容裡 widget_content 負責處理。 - register_widget_control($_X_WIDGET_NAME, ‘widget_options’,$_X_OPTIONS_WIDTH, $_X_OPTIONS_HEIGHT);
向 WP 系統登記這個 plugin 的 widget 可以由使用者變更設定值 ,其內容裡 widget_options 負責處理。
其它函式
- function widget_content($args)
前台UI呈現 - function widget_options()
後台設定 - function GET_OPTIONS()
取得設定,若資料庫沒有就傳回預設參數。
你好這是我的網站:http://afone.twbbs.org/blog/
我將會在網站上加上連結
= =…才剛進入這領域兩天!
就遇到很多問題了…
多多指教!