默認的wordpress博客不具備主題管理選項了,如果我們要添加此功能需要對它進行二次開發了,下面一起來看一個例子。
做WordPress主題的時候,經常需要給主題添加管理選項,以便給主題用戶提供一些自定義的設置,免得改主題源代碼。網上已經有很多人分享了相關的教程,昨晚寫代碼的時候突然要用到這個功能,但是搜了好多版本,僅發現還是NeoEase的版本最順手,鑒于NeoEase的網站經常打不開了,有時候想看也看不了,本文純做記錄,方便以后查閱。
NeoEase的版本是屬于簡易版的,僅支持簡單的文本框、選項等功能,如果需要搭建帶酷炫的拖動等強大功能的選項頁面,可以看看本文末尾推薦的主題管理選項框架。
以下內容轉自 NeoEase
為主題添加一些管理選項并不是難事,你只要回寫完第一個選項處理,其他選項的處理就迎刃而解了。我們這次用 WordPress 自帶的主題 classic 作為例子,創建一個首頁公告欄的管理選項. 本教程需要一定的 HTML 基礎,并對 PHP 有初步了解.
后臺處理:
首先,我們要修改 function.php,主要的處理工作都在這個文件里面,如果主題沒有這個文件,就創建一個吧。 (沒有 function.php 說明主題不支持 Widget,可不是一個好習慣哦,還是趕緊新建一個吧,想讓主題支持 Widget 可以看看這里: 讓主題支持 Widget).
我的處理包括 3 大塊: 獲取選項,初始化,標簽頁操作界面。這里只創建一個公告欄,包括兩個選項 (是否顯示公告欄和公告欄內容)。如果要添加更多選項,也只需要代碼中 3 個 TODO 的位置上追加一些代碼而已。當然,你還需要改一下選項名稱,將 Classic 和 classic 全部之換掉.
- <?php
- /**
- * 選項組類型
- */
- class ClassicOptions {
- /* -- 獲取選項組 -- */
- function getOptions() {
- // 在<a href="/database/database.html" target="_blank">數據庫</a>中獲取選項組
- $options = get_option('classic_options');
- // 如果數據庫中不存在該選項組,設定這些選項的默認值,并將它們插入數據庫
- if (!is_array($options)) {
- $options['notice'] = false;
- $options['notice_content'] = '';
- // TODO: 在這里追加其他選項
- update_option('classic_options', $options);
- }
- // 返回選項組
- return $options;
- }
- /* -- 初始化 -- */
- function init() {
- // 如果是 POST 提交數據,對數據進行限制,并更新到數據庫
- if(isset($_POST['classic_save'])) {
- // 獲取選項組,因為有可能只修改部分選項,所以先整個拿下來再進行更改
- $options = ClassicOptions::getOptions();
- // 數據限制
- if ($_POST['notice']) {
- $options['notice'] = (bool)true;
- } else {
- $options['notice'] = (bool)false;
- }
- $options['notice_content'] = stri<a href="/fw/photo.html" target="_blank">ps</a>lashes($_POST['notice_content']);
- // TODO: 在這追加其他選項的限制處理
- // 更新數據
- update_option('classic_options', $options);
- // 否則,重新獲取選項組,也就是對數據進行初始化
- } else {
- ClassicOptions::getOptions();
- }
- // 在后臺 Design 頁面追加一個標簽頁,叫 Current Theme Options
- add_theme_page("Current Theme Options", "Current Theme Options", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));
- }
- /* -- 標簽頁 -- */
- function display() {
- $options = ClassicOptions::getOptions();
- ?>
- <form action="#" method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">
- <div class="wrap">
- <h2><?php _e('Current Theme Options', 'classic'); ?></h2>
- <!-- 公告欄 -->
- <table class="form-table">
- <tbody>
- <tr valign="top">
- <th scope="row">
- <?php _e('Notice', 'classic'); ?>
- <br/>
- <small style="font-weight:normal;"><?php _e('HTML enabled', 'classic') ?></small>
- </th>
- <td>
- <!-- 是否顯示公告欄 -->
- <label>
- <input name="notice" type="<a href="/tags.php/checkbox/" target="_blank">checkbox</a>" value="checkbox" <?php if($options['notice']) echo "checked='checked'"; ?> />
- <?php _e('Show notice.', 'classic'); ?>
- </label>
- <br/>
- <!-- 公告欄內容 -->
- <label>
- <<a href="/tags.php/textarea/" target="_blank">textarea</a> name="notice_content" cols="50" rows="10" id="notice_content" style="width:98%;font-size:12px;" class="code"><?php echo($options['notice_content']); ?></textarea>
- </label>
- </td>
- </tr>
- </tbody>
- </table>
- <!-- TODO: 在這里追加其他選項內容 -->
- <!-- 提交按鈕 -->
- <p class="submit">
- <input type="submit" name="classic_save" value="<?php _e('Update Options »', 'classic'); ?>" />
- </p>
- </div>
- </form>
- <?php
- }
- }
- //Vevb.com
- /**
- * 登記初始化方法
- */
- add_action('admin_menu', array('ClassicOptions', 'init'));
- ?>
前臺處理:
要公告欄在首頁上顯示,需要修改一下 index.php,這個比較簡單,只是通過一些判斷語句決定東西要不要顯示出來而已,當然,你可以進行其他操作,關鍵是獲取到選項的值,并對它們進行處理.
其實可以分為兩步:
獲取選項,對每個 PHP 文件,獲取一次就行了,可以在文件頂部執行,對選項進行處理,這里判斷成立的話就將公告內容顯示出來.
- <!-- 獲取選項 -->
- <?php $options = get_option('classic_options'); ?>
- <!-- 如果用戶選擇顯示公告欄,并且公告欄有內容,則顯示出來 -->
- <?php if($options['notice'] && $options['notice_content']) : ?>
- <div id="notice">
- <div class="content"><?php echo($options['notice_content']); ?></div>
- </div>
- <?php endif; ?>
使用后臺選項開發框架,可以添加更復雜更強大的選項設置.
新聞熱點
疑難解答
圖片精選