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

首頁 > 網站 > CMS建站 > 正文

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

2020-03-22 17:34:29
字體:
來源:轉載
供稿:網友
作為主題的制作者, 除了實現功能, 展示界面, 還有責任使主題靈活多變, 以滿足更多人不同的需求.
可能一些朋友曾為選用雙欄主題 (單側邊欄) 還是三欄主題 (雙側邊欄) 而煩惱過. 下面我們以 Classic 主題為例, 談談如何在主題中方便地切換單側邊欄和雙側邊欄. 最后我會提供修改后的主題.
添加管理選項
后臺處理
首先, 我們要修改 function.php, 主要的處理工作都在這個文件里面, 如果主題沒有這個文件, 就創建一個吧. (沒有 function.php 說明主題不支持 Widget, 可不是一個好習慣哦, 還是趕緊新建一個吧)
我的處理包括 3 大塊: 獲取選項, 初始化, 標簽頁操作界面. 這里只創建一個公告欄, 包括兩個選項 (是否顯示公告欄和公告欄內容). 如果要添加更多選項, 也只需要代碼中 3 個 TODO 的位置上追加一些代碼而已. 當然, 你還需要改一下選項名稱, 將 Classic 和 html' target='_blank'>classic 全部之換掉.
* 選項組類型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 h2 php _e('Current Theme Options', 'classic'); /h2 !-- 公告欄 -- table tbody tr valign="top" th scope="row" php _e('Notice', 'classic'); br/ small php _e('HTML enabled', 'classic') /small /th !-- 是否顯示公告欄 -- 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" php echo($options['notice_content']); /textarea /label /td /tr /tbody /table !-- TODO: 在這里追加其他選項內容 -- !-- 提交按鈕 -- input type="submit" name="classic_save" value=" php _e('Update Options ', 'classic'); " / /div /form * 登記初始化方法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 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" ', '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" ', 'after_widget' = ' /li ', 'before_title' = ' h3 ', 'after_title' = ' /h3 ' register_sidebar(array( 'name' = 'Sidebar_top', 'before_widget' = ' li id="%1$s" ', 'after_widget' = ' /li ', 'before_title' = ' h3 ', 'after_title' = ' /h3 '修改側邊欄結構首先要明確, 我們現在需要雙側邊欄結構. 怎樣將雙側邊欄變為單側邊欄呢 只要將前一個側邊欄的結束標簽和后一個側邊欄的開始標簽刪除, 兩個側邊欄就合并為一個側邊欄了. 單純的文字很難將我的想法和實現表達出來, 你可以接著看下面的代碼和示例圖片. 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 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
狀態二:雙側邊欄, 沒使用 Widget
狀態三: 單側邊欄, 使用 Widget
狀態四: 雙側邊欄, 頂部側邊欄使用 Widget
狀態五: 雙側邊欄, 底部側邊欄使用 Widget
狀態六: 雙側邊欄, 頂部和底部側邊欄都使用 Widget
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区久久久久久久| 欧美激情欧美激情| 成人黄色在线观看| 日韩中文综合网| 久久成人精品电影| 国产午夜精品全部视频播放| 欧美日韩视频免费播放| 亚洲系列中文字幕| 国产精品欧美激情| 欧美网站在线观看| 精品国产一区二区三区在线观看| 色在人av网站天堂精品| 国产精品一久久香蕉国产线看观看| 国产欧美亚洲精品| 91在线精品视频| 亚洲视频999| 欧美最猛性xxxxx亚洲精品| 成人高h视频在线| 国产精品一区二区三区免费视频| 久久天天躁狠狠躁夜夜躁| 亚洲精品福利资源站| 成人乱人伦精品视频在线观看| 亚洲欧美日本伦理| 欧美美女操人视频| 91久久国产综合久久91精品网站| 精品国产美女在线| 精品亚洲一区二区三区| 欧美激情亚洲一区| 亚洲视频专区在线| 国产a∨精品一区二区三区不卡| 欧美性猛交xxxx乱大交3| 欧美日韩亚洲天堂| 国产午夜精品全部视频播放| 久久精品一本久久99精品| 法国裸体一区二区| 欧美电影免费播放| 精品无人区乱码1区2区3区在线| 51ⅴ精品国产91久久久久久| 永久免费毛片在线播放不卡| 日韩欧美亚洲国产一区| 国产精品老女人视频| 另类美女黄大片| 久久99国产精品久久久久久久久| 日韩在线观看网站| 日韩精品视频在线免费观看| 久久久久中文字幕2018| 色偷偷噜噜噜亚洲男人| 欧美亚洲国产成人精品| 欧美午夜视频一区二区| 91色琪琪电影亚洲精品久久| 久久久精品2019中文字幕神马| 91九色国产社区在线观看| 国外成人在线播放| 成人国产亚洲精品a区天堂华泰| 欧美成人精品三级在线观看| 在线丨暗呦小u女国产精品| 在线亚洲午夜片av大片| 国产精品视频资源| 日本午夜在线亚洲.国产| 成人高清视频观看www| 国产精品都在这里| 亚洲国产精品yw在线观看| 日韩乱码在线视频| 中文字幕国产亚洲| 欧美日韩综合视频| 久久综合电影一区| 亚洲国产一区自拍| 亚洲精品久久久久久久久久久久久| 中文字幕日韩专区| 日本成人激情视频| 日韩国产欧美精品在线| 欧美贵妇videos办公室| 久久久久久久国产| 日本成人在线视频网址| 国产69精品久久久| 国产精品美女主播| 精品久久久久久| 欧美二区在线播放| 亚洲欧美制服丝袜| 日韩av成人在线观看| 亚洲精品中文字幕有码专区| 国产日韩精品综合网站| 亚洲丝袜av一区| 一本色道久久88综合日韩精品| 日韩av手机在线观看| 欧美性猛xxx| 亚洲色图18p| 中文字幕亚洲在线| 日韩视频―中文字幕| 性色av一区二区三区| 成人动漫网站在线观看| 成人日韩在线电影| 亚洲欧美中文字幕在线一区| 午夜精品久久久久久久99热浪潮| 国产亚洲aⅴaaaaaa毛片| 在线观看欧美日韩国产| 俺去了亚洲欧美日韩| 久色乳综合思思在线视频| 亚洲第一精品久久忘忧草社区| 亚洲欧美中文字幕在线一区| 久久久亚洲影院| 国产成人精品久久二区二区| 日韩美女av在线免费观看| 啊v视频在线一区二区三区| 在线电影欧美日韩一区二区私密| 欧美丝袜一区二区三区| 国产视频在线观看一区二区| 国产日韩亚洲欧美| 亚洲国产精品女人久久久| 精品动漫一区二区| 欧美成人高清视频| 亚洲视频在线视频| 国产精品久久久久久久久久久久久久| 精品无人区乱码1区2区3区在线| 伊人久久五月天| 久久综合伊人77777尤物| 亚洲欧洲日本专区| 亚洲精品日韩激情在线电影| 欧美精品videosex性欧美| 欧美激情综合亚洲一二区| 日韩免费看的电影电视剧大全| 97国产精品免费视频| 欧美精品电影在线| 国产精品最新在线观看| 亚洲欧美日韩精品久久亚洲区| 色av中文字幕一区| 亚洲一区二区三区香蕉| 亚洲跨种族黑人xxx| 热99久久精品| 久久久精品免费视频| 欧美性xxxx极品高清hd直播| 人人爽久久涩噜噜噜网站| 亚洲一区二区久久久| 日韩一二三在线视频播| 欧美性在线观看| 一区二区欧美在线| 日韩经典一区二区三区| 91精品久久久久| 精品国产欧美一区二区五十路| 久久亚洲精品成人| 国产欧美精品在线播放| 57pao成人永久免费视频| 久久久久国色av免费观看性色| 欧美性极品少妇精品网站| 国产亚洲激情视频在线| 亚洲欧美视频在线| 欧美色播在线播放| 欧美性猛交xxxx乱大交蜜桃| 欧美尤物巨大精品爽| 亚洲性线免费观看视频成熟| 国产69精品久久久久久| 91视频-88av| 国产视频精品久久久| 日韩国产欧美精品一区二区三区| 国产一区深夜福利| 自拍亚洲一区欧美另类| 色哟哟亚洲精品一区二区| 久久亚洲一区二区三区四区五区高| 精品成人在线视频| 亚洲第一天堂av| 久久免费精品日本久久中文字幕| 亚洲а∨天堂久久精品9966| 中文字幕精品www乱入免费视频| 青青草原成人在线视频|