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