当前位置:首页 > CMS教程 > WordPress > 列表

给WordPress添加主题管理选项

发布:smiling 来源: PHP粉丝网  添加日期:2015-10-15 15:03:05 浏览: 评论:0 

默认的wordpress博客不具备主题管理选项了,如果我们要添加此功能需要对它进行二次开发了,下面一起来看一个例子。

做WordPress主题的时候,经常需要给主题添加管理选项,以便给主题用户提供一些自定义的设置,免得改主题源代码。网上已经有很多人分享了相关的教程,昨晚写代码的时候突然要用到这个功能,但是搜了好多版本,仅发现还是NeoEase的版本最顺手,鉴于NeoEase的网站经常打不开了,有时候想看也看不了,本文纯做记录,方便以后查阅。

NeoEase的版本是属于简易版的,仅支持简单的文本框、选项等功能,如果需要搭建带酷炫的拖动等强大功能的选项页面,可以看看本文末尾推荐的主题管理选项框架。

以下内容转自 NeoEase

为主题添加一些管理选项并不是难事,你只要回写完第一个选项处理,其他选项的处理就迎刃而解了。我们这次用 WordPress 自带的主题 classic 作为例子,创建一个首页公告栏的管理选项. 本教程需要一定的 HTML 基础,并对 PHP 有初步了解.

后台处理:

首先,我们要修改 function.php,主要的处理工作都在这个文件里面,如果主题没有这个文件,就创建一个吧。 (没有 function.php 说明主题不支持 Widget,可不是一个好习惯哦,还是赶紧新建一个吧,想让主题支持 Widget 可以看看这里: 让主题支持 Widget).

我的处理包括 3 大块: 获取选项,初始化,标签页操作界面。这里只创建一个公告栏,包括两个选项 (是否显示公告栏和公告栏内容)。如果要添加更多选项,也只需要代码中 3 个 TODO 的位置上追加一些代码而已。当然,你还需要改一下选项名称,将 Classic 和 classic 全部之换掉.

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * 选项组类型 
  6.  
  7.  */ 
  8.  
  9. class ClassicOptions { 
  10.  
  11.    
  12.  
  13.     /* -- 获取选项组 -- */ 
  14.  
  15.     function getOptions() { 
  16.  
  17.         // 在<a href="/database/database.html" target="_blank">数据库</a>中获取选项组 
  18.  
  19.         $options = get_option('classic_options'); 
  20.  
  21.         // 如果数据库中不存在该选项组,设定这些选项的默认值,并将它们插入数据库 
  22.  
  23.         if (!is_array($options)) { 
  24.  
  25.             $options['notice'] = false; 
  26.  
  27.             $options['notice_content'] = ''
  28.  
  29.             // TODO: 在这里追加其他选项 
  30.  
  31.             update_option('classic_options'$options); 
  32.  
  33.         } 
  34.  
  35.         // 返回选项组 
  36.  
  37.         return $options
  38.  
  39.     } 
  40.  
  41.    
  42.  
  43.     /* -- 初始化 -- */ 
  44.  
  45.     function init() { 
  46.  
  47.         // 如果是 POST 提交数据,对数据进行限制,并更新到数据库 
  48.  
  49.         if(isset($_POST['classic_save'])) { 
  50.  
  51.             // 获取选项组,因为有可能只修改部分选项,所以先整个拿下来再进行更改 
  52.  
  53.             $options = ClassicOptions::getOptions(); 
  54.  
  55.    
  56.  
  57.             // 数据限制 
  58.  
  59.             if ($_POST['notice']) { 
  60.  
  61.                 $options['notice'] = (bool)true; 
  62.  
  63.             } else { 
  64.  
  65.                 $options['notice'] = (bool)false; 
  66.  
  67.             } 
  68.  
  69.             $options['notice_content'] = stri<a href="/fw/photo.html" target="_blank">ps</a>lashes($_POST['notice_content']); 
  70.  
  71.    
  72.  
  73.             // TODO: 在这追加其他选项的限制处理 
  74.  
  75.    
  76.  
  77.             // 更新数据 
  78.  
  79.             update_option('classic_options'$options); 
  80.  
  81.    
  82.  
  83.         // 否则,重新获取选项组,也就是对数据进行初始化 
  84.  
  85.         } else { 
  86.  
  87.             ClassicOptions::getOptions(); 
  88.  
  89.         } 
  90.  
  91.    
  92.  
  93.         // 在后台 Design 页面追加一个标签页,叫 Current Theme Options 
  94.  
  95.         add_theme_page("Current Theme Options""Current Theme Options"'edit_themes'basename(__FILE__), array('ClassicOptions''display')); 
  96.  
  97.     } 
  98.  
  99.    
  100.  
  101.     /* -- 标签页 -- */ 
  102.  
  103.     function display() { 
  104.  
  105.         $options = ClassicOptions::getOptions(); 
  106.  
  107. ?> 
  108.  
  109.    
  110.  
  111. <form action="#" method="post" enctype="multipart/form-data" name="classic_form" id="classic_form"
  112.  
  113.     <div class="wrap"
  114.  
  115.         <h2><?php _e('Current Theme Options''classic'); ?></h2> 
  116.  
  117.    
  118.  
  119.         <!-- 公告栏 --> 
  120.  
  121.         <table class="form-table"
  122.  
  123.             <tbody> 
  124.  
  125.                 <tr valign="top"
  126.  
  127.                     <th scope="row"
  128.  
  129.                         <?php _e('Notice''classic'); ?> 
  130.  
  131.                         <br/> 
  132.  
  133.                         <small style="font-weight:normal;"><?php _e('HTML enabled''classic') ?></small> 
  134.  
  135.                     </th> 
  136.  
  137.                     <td> 
  138.  
  139.                         <!-- 是否显示公告栏 --> 
  140.  
  141.                         <label> 
  142.  
  143.                             <input name="notice" type="<a href="/tags.php/checkbox/" target="_blank">checkbox</a>" value="checkbox" <?php if($options['notice']) echo "checked='checked'"; ?> /> 
  144.  
  145.                              <?php _e('Show notice.''classic'); ?> 
  146.  
  147.                         </label> 
  148.  
  149.                         <br/> 
  150.  
  151.                         <!-- 公告栏内容 --> 
  152.  
  153.                         <label> 
  154.  
  155.                             <<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> 
  156.  
  157.                         </label> 
  158.  
  159.                     </td> 
  160.  
  161.                 </tr> 
  162.  
  163.             </tbody> 
  164.  
  165.         </table> 
  166.  
  167.    
  168.  
  169.         <!-- TODO: 在这里追加其他选项内容 --> 
  170.  
  171.    
  172.  
  173.         <!-- 提交按钮 --> 
  174.  
  175.         <p class="submit"
  176.  
  177.             <input type="submit" name="classic_save" value="<?php _e('Update Options &raquo;', 'classic'); ?>" /> 
  178.  
  179.         </p> 
  180.  
  181.     </div> 
  182.  
  183.    
  184.  
  185. </form> 
  186.  
  187.    
  188.  
  189. <?php 
  190.  
  191.     } 
  192.  
  193. //phpfensi.com 
  194.  
  195. /** 
  196.  
  197.  * 登记初始化方法 
  198.  
  199.  */ 
  200.  
  201. add_action('admin_menu'array('ClassicOptions''init')); 
  202. ?> 

前台处理:

要公告栏在首页上显示,需要修改一下 index.php,这个比较简单,只是通过一些判断语句决定东西要不要显示出来而已,当然,你可以进行其他操作,关键是获取到选项的值,并对它们进行处理.

其实可以分为两步:

获取选项,对每个 PHP 文件,获取一次就行了,可以在文件顶部执行,对选项进行处理,这里判断成立的话就将公告内容显示出来.

  1. <!-- 获取选项 --> 
  2.  
  3. <?php $options = get_option('classic_options'); ?> 
  4.  
  5. <!-- 如果用户选择显示公告栏,并且公告栏有内容,则显示出来 --> 
  6.  
  7. <?php if($options['notice'] && $options['notice_content']) : ?> 
  8.  
  9.     <div id="notice"
  10.  
  11.         <div class="content"><?php echo($options['notice_content']); ?></div> 
  12.  
  13.     </div> 
  14.  
  15. <?php endif; ?> 

使用后台选项开发框架,可以添加更复杂更强大的选项设置.

Tags: WordPress主题 WordPress管理选项

分享到: