[WP-Plugin]Sidebar Widget 基礎架構(wp-plugin-base.php)

八月 27, 2008

widget

本文利用 wp-plugin-base.php 簡單介紹 wordpress plugin 的架構。

  • 前台產生標準 widget 的外觀,內容則是印出設定值。
  • 後台 widget 設定介面,可以修改設定值。
  • 沒有直接(使用 SQL )變更資料庫。


plugin 基本資料

請參考下圖:

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');
?>

註冊及登記

  1. add_action(‘plugins_loaded’, ‘widget_X_init’);
    將 widget_X_init 註冊到 WP 系統中,在 plugins_loaded 的事件中呼叫執行。
  2. register_sidebar_widget($_X_WIDGET_NAME, ‘widget_content’);
    向 WP 系統登記這個 plugin 支援 widget,其內容裡 widget_content 負責處理。
  3. 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()
    取得設定,若資料庫沒有就傳回預設參數。

重覆使用 wp-plugin-base.php

  1. 取代字串「_X_」成為您的新名稱,避免函式名稱重複而發生系統錯誤。
  2. 修改 plugin 的基本資料,如作者、說明、版本等。
  3. 修改常數宣告的部份以符合您的需求。
    常數宣告
    後台設定
  4. 改寫前台 widget_content
  5. 改寫後台 widget_options

One Response to “[WP-Plugin]Sidebar Widget 基礎架構(wp-plugin-base.php)”

  1. 你好這是我的網站:http://afone.twbbs.org/blog/

    我將會在網站上加上連結

    = =…才剛進入這領域兩天!

    就遇到很多問題了…

    多多指教!

    您好,我也將貴站加入連結!