物件導向程式設計是現在程式語言中很重要的方法,很多程式語言都支援物件導向的程式設計方法,至於物件導向的概念、特點什麼的,就不多說了,我們的後臺設定選項如果設定資料非常多,按照前面的方法,需要些很多程式碼,當然你也可以使用各種自定義函式來簡化程式碼,現在我們使用類來新增設定選項,在配置和修改的時候也非常簡單。

我們先看一個簡單一點的類 (參考自 NEOEASE):

第一步,新建 php 檔案 (我還是使用前面教程中新建的 myfunctions.php 檔案),我用預設主題 Twenty Ten 來測試,首先在這個主題的資料夾下新建一個檔案-myfunctions.php   然後開啟 functions.php 檔案在最底部新增下面的程式碼載入我們新建的這個檔案:

  1. include_once('myfunctions.php');  

類的程式碼如下:

  1. <?php      
  2. //類 ClassicOptions   
  3. class ClassicOptions {      
  4.     /* -- getOptions 函式獲取選項組 -- */     
  5.     function getOptions() {    
  6.         // 在資料庫中獲取選項組      
  7.         $options = get_option('classic_options');      
  8.         // 如果資料庫中不存在該選項組, 設定這些選項的預設值, 並將它們插入資料庫      
  9.         if (!is_array($options)) {      
  10.             //初始預設資料   
  11.             $options['ashu_copy_right'] = '阿樹工作室';   
  12.                
  13.             //這裡可新增更多設定選項   
  14.                
  15.             update_option('classic_options', $options);      
  16.         }   
  17.         // 返回選項組   
  18.         return $options;   
  19.     }   
  20.     /* -- init 函式 初始化 -- */     
  21.     function init() {      
  22.         // 如果是 POST 提交資料, 對資料進行限制, 並更新到資料庫      
  23.         if(isset($_POST['classic_save'])) {      
  24.             // 獲取選項組, 因為有可能只修改部分選項, 所以先整個拿下來再進行更改      
  25.             $options = ClassicOptions::getOptions();      
  26.             // 資料處理    
  27.             $options['ashu_copy_right'] = stripslashes($_POST['ashu_copy_right']);      
  28.                
  29.             //在這追加其他選項的限制處理      
  30.                
  31.             // 更新資料      
  32.             update_option('classic_options', $options);      
  33.            
  34.         } else {   
  35.             // 否則, 重新獲取選項組, 也就是對資料進行初始化   
  36.             ClassicOptions::getOptions();      
  37.         }   
  38.            
  39.         //新增設定頁面   
  40.         add_theme_page("主題設定""主題設定", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));      
  41.     }      
  42.     /* -- 標籤頁 -- */     
  43.     function display() {     
  44.         $options = ClassicOptions::getOptions(); ?>      
  45.         <form method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">      
  46.         <div class="wrap">      
  47.         <h2><?php _e('阿樹工作室主題設定', 'classic'); ?></h2>      
  48.         <!-- 設定內容 -->      
  49.         <table class="form-table">      
  50.             <tbody>      
  51.                 <tr valign="top">      
  52.                     <td>   
  53.                         <label>      
  54.                             <input type="text" name="ashu_copy_right" value="<?php echo($options['ashu_copy_right']); ?>" size="20"/><?php _e('阿樹工作室版權文字');?>      
  55.                         </label>      
  56.                     </td>      
  57.                 </tr>      
  58.             </tbody>      
  59.         </table>      
  60.         <!-- TODO: 在這裡追加其他選項內容 -->      
  61.         <p class="submit">      
  62.             <input type="submit" name="classic_save" value="<?php _e('儲存設定'); ?>" />      
  63.         </p>      
  64.     </div>      
  65. </form>      
  66. <?php      
  67.     }      
  68. }    
  69.     
  70. /*初始化,執行 ClassicOptions 類的 init 函式*/     
  71. add_action('admin_menu', array('ClassicOptions', 'init'));       
  72. ?>    

類的解析:

其實這個類也很簡單,第一步:透過 admin_menu 鉤子執行類的 init 函式,而 init 函式程式碼很簡單,就是處理和儲存資料,新增一個設定頁面,這兩個程式碼前面的 教程都已經講過。 display 函式更加簡單,知識輸出一個表單而已。 getOption 函式也就是獲取選項的資料,如果沒有資料就設定一個預設資料。

難點:admin_menu 鉤子中,執行函式使用 array('類','函式') 這種形式,我們在後臺教程二中提到過一次,還有 「類:: 函式」 這種新式的呼叫,可以參考 php 資料。