亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

實現WordPress主題側邊欄切換功能的PHP腳本詳解

2024-05-04 23:40:58
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了實現WordPress主題側邊欄切換功能的PHP腳本詳解,包括為WordPress主題添加管理選項的方法,需要的朋友可以參考下
 

作為主題的制作者, 除了實現功能, 展示界面, 還有責任使主題靈活多變, 以滿足更多人不同的需求.
可能一些朋友曾為選用雙欄主題 (單側邊欄) 還是三欄主題 (雙側邊欄) 而煩惱過. 下面我們以 Classic 主題為例, 談談如何在主題中方便地切換單側邊欄和雙側邊欄. 最后我會提供修改后的主題.

實現WordPress主題側邊欄切換功能的PHP腳本詳解

添加管理選項
后臺處理
首先, 我們要修改 function.php, 主要的處理工作都在這個文件里面, 如果主題沒有這個文件, 就創建一個吧. (沒有 function.php 說明主題不支持 Widget, 可不是一個好習慣哦, 還是趕緊新建一個吧)
我的處理包括 3 大塊: 獲取選項, 初始化, 標簽頁操作界面. 這里只創建一個公告欄, 包括兩個選項 (是否顯示公告欄和公告欄內容). 如果要添加更多選項, 也只需要代碼中 3 個 TODO 的位置上追加一些代碼而已. 當然, 你還需要改一下選項名稱, 將 Classic 和 classic 全部之換掉.

<?php/** * 選項組類型 */class ClassicOptions {  /* -- 獲取選項組 -- */ function getOptions() { // 在數據庫中獲取選項組 $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'] = stripslashes($_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="checkbox" value="checkbox" <?php if($options['notice']) echo "checked='checked'"; ?> />    <?php _e('Show notice.', 'classic'); ?>   </label>   <br/>   <!-- 公告欄內容 -->   <label>    <textarea 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 }} /** * 登記初始化方法 */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; ?>

可以使用管理項來控制側邊欄的數量, 在主題文件中獲取側邊欄的數量, 對不同的數量作出不同的處理, 以達到在不同數量側邊欄之間切換的目的.

// 側邊欄數量, 默認為單側邊欄$options['sidebar'] = 1;// 獲得最新提交的值$options['sidebar'] = $_POST['sidebar'];<select name="sidebar" size="1"> <!-- 單側邊欄 --> <option value="1" <?php if($options['sidebar'] != 2) echo ' selected '; ?>><?php _e('Single', 'classic'); ?></option> <!-- 雙側邊欄 --> <option value="2" <?php if($options['sidebar'] == 2) echo ' selected '; ?>><?php _e('Double', 'classic'); ?></option></select> <?php _e('sidebar(s)', 'classic'); ?>.

添加 Widget 支持

因為要在單側邊欄和雙側邊欄中切換, 所以我們需要對不同的兩種模式定義兩個 Widget 初始化的分支.
這里比較特殊, 為了在代碼中正確獲取 Widget 信息, 就算是單側邊欄也需要起一個別名. 就像代碼中的 Sidebar_single. 當側邊欄個數為 1 時, 登記 Sidebar_single. 當側邊欄個數為 2 時, 登記 Sidebar_top 和 Sidebar_bottom.

// Widgets$options = get_option('classic_options'); // 單側邊欄if(function_exists('register_sidebar') && $options['sidebar'] == 1) { register_sidebar(array( 'name' => 'Sidebar_single', 'before_widget' => '<li id="%1$s" class="widget %2$s">', 'after_widget' => '</li>', 'before_title' => '<h3>', 'after_title' => '</h3>' )); // 雙側邊欄} else if(function_exists('register_sidebar') && $options['sidebar'] == 2) { register_sidebar(array(  'name' => 'Sidebar_bottom',  'before_widget' => '<li id="%1$s" class="widget %2$s">',  'after_widget' => '</li>',  'before_title' => '<h3>',  'after_title' => '</h3>' )); register_sidebar(array(  'name' => 'Sidebar_top',  'before_widget' => '<li id="%1$s" class="widget %2$s">',  'after_widget' => '</li>',  'before_title' => '<h3>',  'after_title' => '</h3>' ));}

修改側邊欄結構

首先要明確, 我們現在需要雙側邊欄結構. 怎樣將雙側邊欄變為單側邊欄呢? 只要將前一個側邊欄的結束標簽和后一個側邊欄的開始標簽刪除, 兩個側邊欄就合并為一個側邊欄了. 單純的文字很難將我的想法和實現表達出來, 你可以接著看下面的代碼和示例圖片.

<ul class="sidebar_1"> <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_single') ) : // single ?>  <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_top') ) : // top ?><!-- TODO: 頂部側邊欄內容 --> <?php endif; // top ?>  <?php if ($options['sidebar'] >= 2) : ?></ul><ul class="sidebar_2"> <?php endif; ?>  <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_bottom') ) : // bottom ?><!-- TODO: 底部側邊欄內容 --> <?php endif; // bottom ?>  <?php endif; // single ?></ul>

OK, 這就是側邊欄代碼結構了. 它可以完美得實現單雙側邊欄間的切換. 但它是怎么工作的呢? 我將在后面用圖片列出它的 6 種可能出現的狀態.
因為主題已經支持 Widget 了, 所以代碼中 function_exists('dynamic_sidebar') === true, 則 !function_exists('dynamic_sidebar') === false.
記得添加 Widget 支持時寫的代碼嗎? 側邊欄為 1 時 sidebar_single 有效, 側邊欄為 2 時, sidebar_top 和 sidebar_bottom 有效. 這是貫穿整個思路的關鍵.

備注:

  • 紅色: 表示選中代碼的值是 false, 不通過
  • 綠色: 表示選中代碼的值是 true, 通過
  • 藍色: 表示選中部分將被選用的 widgets 所取代
  • 灰色: 表示選中部分代碼將會失效

狀態一: 單側邊欄, 沒使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解

狀態二:雙側邊欄, 沒使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解

狀態三: 單側邊欄, 使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解

狀態四: 雙側邊欄, 頂部側邊欄使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解

狀態五: 雙側邊欄, 底部側邊欄使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解

狀態六: 雙側邊欄, 頂部和底部側邊欄都使用 Widget

實現WordPress主題側邊欄切換功能的PHP腳本詳解



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品极品美女粉嫩高清在线| 美女视频黄免费的亚洲男人天堂| 亚洲精品日韩丝袜精品| 91高潮在线观看| 日韩**中文字幕毛片| 亚洲国产中文字幕久久网| 亚洲日本欧美日韩高观看| 性欧美xxxx视频在线观看| 亚洲国产又黄又爽女人高潮的| 久久精品国产欧美激情| 日韩中文字幕在线精品| 色哟哟网站入口亚洲精品| 色老头一区二区三区| 国产精品美女av| 国产精品久久久久免费a∨大胸| 亚洲成色999久久网站| 欧美久久精品一级黑人c片| 538国产精品一区二区免费视频| 欧美高清激情视频| 精品呦交小u女在线| 亚洲第一级黄色片| …久久精品99久久香蕉国产| 97色在线视频| 91免费看片网站| 在线观看亚洲视频| 日韩欧美在线视频免费观看| 色先锋久久影院av| 日韩免费观看在线观看| 成人av电影天堂| 国产精品久久久久久久av电影| 成人激情视频在线播放| 欧美日韩国产丝袜另类| 国产在线视频一区| 性色av一区二区三区| 亚洲欧洲xxxx| 在线播放日韩av| 91沈先生在线观看| 久久香蕉国产线看观看av| 国产精品亚洲片夜色在线| 色综合影院在线| 亚洲欧美日韩在线高清直播| 北条麻妃99精品青青久久| 日韩精品一区二区视频| 欧洲午夜精品久久久| 精品久久久精品| 日韩欧美精品免费在线| 欧洲s码亚洲m码精品一区| 成人乱人伦精品视频在线观看| 欧美大全免费观看电视剧大泉洋| 久久久久久国产三级电影| 一区二区成人av| 国产亚洲免费的视频看| 国产精品毛片a∨一区二区三区|国| 欧美一区三区三区高中清蜜桃| 91在线免费网站| 91精品视频一区| 激情亚洲一区二区三区四区| 国产成人免费av| 中文字幕亚洲综合久久筱田步美| 欧美在线激情网| 欧美色道久久88综合亚洲精品| 在线观看国产精品91| 2020国产精品视频| 日韩av快播网址| 欧美成人精品在线观看| 国产一区二区日韩| 久久亚洲成人精品| 日韩欧美福利视频| 欧美亚洲国产成人精品| 午夜精品久久17c| 亚洲成人精品久久久| 亚洲经典中文字幕| 国产精品扒开腿爽爽爽视频| 777国产偷窥盗摄精品视频| 亚洲人成在线观看网站高清| 欧美日韩在线免费观看| 欧美激情videoshd| 日韩精品日韩在线观看| 国产999精品久久久| 亚洲最新av在线| 欧美专区中文字幕| 日韩久久免费电影| 国产免费一区视频观看免费| 日韩电影中文字幕av| 日韩经典一区二区三区| 国产不卡av在线免费观看| 国产一区二区三区免费视频| 欧美夫妻性生活视频| 日韩精品在线免费观看视频| 视频在线一区二区| 日本精品性网站在线观看| 久久精品视频免费播放| 97在线精品视频| 久久久免费高清电视剧观看| 97在线视频国产| 欧美日韩在线观看视频小说| 亚洲韩国日本中文字幕| 欧美性黄网官网| 中文字幕亚洲欧美日韩在线不卡| 日韩在线观看免费av| 日韩免费av在线| 欧美日韩国产麻豆| 国产精品欧美日韩一区二区| 久久99久久99精品中文字幕| 国产视频久久久久久久| 日韩亚洲精品电影| 久久九九精品99国产精品| 日韩在线视频免费观看高清中文| 国产精品亚洲аv天堂网| 中文字幕亚洲欧美一区二区三区| 欧美午夜性色大片在线观看| 日韩在线观看视频免费| 久久国产精品99国产精| 91精品视频在线看| 一区二区欧美日韩视频| 最近更新的2019中文字幕| 国产91九色视频| 欧美成人午夜影院| 亚洲精品www久久久| 国产精品久久久亚洲| 欧美大秀在线观看| 亚洲欧美制服综合另类| 中日韩美女免费视频网站在线观看| 国产丝袜一区二区| 国产亚洲一区二区在线| 国产精品入口免费视| 国产欧美一区二区三区视频| 国产精品极品美女在线观看免费| 一区二区欧美久久| 欧美自拍视频在线| 久久精品91久久香蕉加勒比| 日韩电影中文字幕在线观看| 全色精品综合影院| 欧美贵妇videos办公室| 成人黄色午夜影院| 亚洲欧美成人网| 欧美亚洲视频在线看网址| 欧美成人免费一级人片100| 91精品免费视频| 久久不射热爱视频精品| 久久伊人免费视频| 久久久亚洲影院你懂的| 国产精品国产福利国产秒拍| 欧美在线视频一区二区| 91干在线观看| 日韩精品一区二区视频| 色偷偷888欧美精品久久久| 亚洲激情免费观看| 欧美午夜女人视频在线| 91九色综合久久| 亚洲国产婷婷香蕉久久久久久| 亚洲视频一区二区| 久久综合九色九九| 久久精品电影网| 精品福利在线观看| 国产精品视频在线播放| 久久精品国产清自在天天线| 日韩视频中文字幕| 国产精品www色诱视频| 2023亚洲男人天堂| 97成人在线视频| 在线成人免费网站| 久久久国产精品免费| 国产亚洲精品高潮|