面向對象編程是現在編程語言中很重要的方法,很多程序語言都支持面向對象的編程方法,至於面向對象的概念、特點什麼的,就不多説了,我們的後台設置選項如果設置數據非常多,按照前面的方法,需要些很多代碼,當然你也可以使用各種自定義函數來簡化代碼,現在我們使用類來添加設置選項,在配置和修改的時候也非常簡單。
我們先看一個簡單一點的類 (參考自 NEOEASE):
第一步,新建 php 文件 (我還是使用前面教程中新建的 myfunctions.php 文件),我用默認主題 Twenty Ten 來測試,首先在這個主題的文件夾下新建一個文件-myfunctions.php 然後打開 functions.php 文件在最底部添加下面的代碼載入我們新建的這個文件:
- include_once('myfunctions.php');
類的代碼如下:
- <?php
- //類 ClassicOptions
- class ClassicOptions {
- /* -- getOptions 函數獲取選項組 -- */
- function getOptions() {
- // 在數據庫中獲取選項組
- $options = get_option('classic_options');
- // 如果數據庫中不存在該選項組, 設定這些選項的默認值, 並將它們插入數據庫
- if (!is_array($options)) {
- //初始默認數據
- $options['ashu_copy_right'] = '阿樹工作室';
- //這裏可添加更多設置選項
- update_option('classic_options', $options);
- }
- // 返回選項組
- return $options;
- }
- /* -- init 函數 初始化 -- */
- function init() {
- // 如果是 POST 提交數據, 對數據進行限制, 並更新到數據庫
- if(isset($_POST['classic_save'])) {
- // 獲取選項組, 因為有可能只修改部分選項, 所以先整個拿下來再進行更改
- $options = ClassicOptions::getOptions();
- // 數據處理
- $options['ashu_copy_right'] = stripslashes($_POST['ashu_copy_right']);
- //在這追加其他選項的限制處理
- // 更新數據
- update_option('classic_options', $options);
- } else {
- // 否則, 重新獲取選項組, 也就是對數據進行初始化
- ClassicOptions::getOptions();
- }
- //添加設置頁面
- add_theme_page("主題設置", "主題設置", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));
- }
- /* -- 標籤頁 -- */
- function display() {
- $options = ClassicOptions::getOptions(); ?>
- <form method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">
- <div class="wrap">
- <h2><?php _e('阿樹工作室主題設置', 'classic'); ?></h2>
- <!-- 設置內容 -->
- <table class="form-table">
- <tbody>
- <tr valign="top">
- <td>
- <label>
- <input type="text" name="ashu_copy_right" value="<?php echo($options['ashu_copy_right']); ?>" size="20"/><?php _e('阿樹工作室版權文字');?>
- </label>
- </td>
- </tr>
- </tbody>
- </table>
- <!-- TODO: 在這裏追加其他選項內容 -->
- <p class="submit">
- <input type="submit" name="classic_save" value="<?php _e('保存設置'); ?>" />
- </p>
- </div>
- </form>
- <?php
- }
- }
- /*初始化,執行 ClassicOptions 類的 init 函數*/
- add_action('admin_menu', array('ClassicOptions', 'init'));
- ?>
類的解析:
其實這個類也很簡單,第一步:通過 admin_menu 鈎子執行類的 init 函數,而 init 函數代碼很簡單,就是處理和保存數據,添加一個設置頁面,這兩個代碼前面的 教程都已經講過。 display 函數更加簡單,知識輸出一個表單而已。 getOption 函數也就是獲取選項的數據,如果沒有數據就設置一個默認數據。
難點:admin_menu 鈎子中,執行函數使用 array('類','函數') 這種形式,我們在後台教程二中提到過一次,還有 「類:: 函數」 這種新式的調用,可以參考 php 資料。