wordpress后台制作教程(七):使用类

面向对象编程是现在编程语言中很重要的方法,很多程序语言都支持面向对象的编程方法,至于面向对象的概念、特点什么的,就不多说了,我们的后台设置选项如果设置数据非常多,按照前面的方法,需要些很多代码,当然你也可以使用各种自定义函数来简化代码,现在我们使用类来添加设置选项,在配置和修改的时候也非常简单。

我们先看一个简单一点的类(参考自NEOEASE):

第一步,新建php文件(我还是使用前面教程中新建的myfunctions.php文件),我用默认主题Twenty Ten来测试,首先在这个主题的文件夹下新建一个文件-myfunctions.php   然后打开functions.php文件在最底部添加下面的代码载入我们新建的这个文件:

  1. include_once('myfunctions.php');  

类的代码如下:

  1. <?php      
  2. //类ClassicOptions   
  3. class ClassicOptions {      
  4.     /* -- getOptions函数获取选项组 -- */     
  5.     function getOptions() {    
  6.         // 在数据库中获取选项组      
  7.         $options = get_option('classic_options');      
  8.         // 如果数据库中不存在该选项组, 设定这些选项的默认值, 并将它们插入数据库      
  9.         if (!is_array($options)) {      
  10.             //初始默认数据   
  11.             $options['ashu_copy_right'] = '阿树工作室';   
  12.                
  13.             //这里可添加更多设置选项   
  14.                
  15.             update_option('classic_options', $options);      
  16.         }   
  17.         // 返回选项组   
  18.         return $options;   
  19.     }   
  20.     /* -- init函数 初始化 -- */     
  21.     function init() {      
  22.         // 如果是 POST 提交数据, 对数据进行限制, 并更新到数据库      
  23.         if(isset($_POST['classic_save'])) {      
  24.             // 获取选项组, 因为有可能只修改部分选项, 所以先整个拿下来再进行更改      
  25.             $options = ClassicOptions::getOptions();      
  26.             // 数据处理    
  27.             $options['ashu_copy_right'] = stripslashes($_POST['ashu_copy_right']);      
  28.                
  29.             //在这追加其他选项的限制处理      
  30.                
  31.             // 更新数据      
  32.             update_option('classic_options', $options);      
  33.            
  34.         } else {   
  35.             // 否则, 重新获取选项组, 也就是对数据进行初始化   
  36.             ClassicOptions::getOptions();      
  37.         }   
  38.            
  39.         //添加设置页面   
  40.         add_theme_page("主题设置""主题设置", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));      
  41.     }      
  42.     /* -- 标签页 -- */     
  43.     function display() {     
  44.         $options = ClassicOptions::getOptions(); ?>      
  45.         <form method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">      
  46.         <div class="wrap">      
  47.         <h2><?php _e('阿树工作室主题设置', 'classic'); ?></h2>      
  48.         <!-- 设置内容 -->      
  49.         <table class="form-table">      
  50.             <tbody>      
  51.                 <tr valign="top">      
  52.                     <td>   
  53.                         <label>      
  54.                             <input type="text" name="ashu_copy_right" value="<?php echo($options['ashu_copy_right']); ?>" size="20"/><?php _e('阿树工作室版权文字');?>      
  55.                         </label>      
  56.                     </td>      
  57.                 </tr>      
  58.             </tbody>      
  59.         </table>      
  60.         <!-- TODO: 在这里追加其他选项内容 -->      
  61.         <p class="submit">      
  62.             <input type="submit" name="classic_save" value="<?php _e('保存设置'); ?>" />      
  63.         </p>      
  64.     </div>      
  65. </form>      
  66. <?php      
  67.     }      
  68. }    
  69.     
  70. /*初始化,执行ClassicOptions类的init函数*/     
  71. add_action('admin_menu', array('ClassicOptions', 'init'));       
  72. ?>    

类的解析:

其实这个类也很简单,第一步:通过admin_menu钩子执行类的init函数,而init函数代码很简单,就是处理和保存数据,添加一个设置页面,这两个代码前面的 教程都已经讲过。display函数更加简单,知识输出一个表单而已。getOption函数也就是获取选项的数据,如果没有数据就设置一个默认数据。

难点:admin_menu钩子中,执行函数使用array('类','函数')这种形式,我们在后台教程二中提到过一次,还有 “类::函数”这种新式的调用,可以参考php资料

已有5条评论

  1. electroApache
    electroApache : 回复

    大神,你还在么?我可以把这些都转走么?

  2. 丿一
    丿一 : 回复

    还有display方法也应该使用静态方法。

  3. 丿一
    丿一 : 回复

    一直对这篇教程相当疑惑,WP测试也没问题;后来才发现是因为没有开启WP_DEBUG,开启后总算提示代码问题了;这里的getOptions方法和init方法应该设置为静态方法才符合规范。

  4. 小兽
    小兽 : 回复

    树哥,我跟着教程走,后台成功了,可是我在前台调用

    <?php echo($options['ashu_copy_right']); ?>

    没有出现我设置的内容呀。求解。

  5. 三子博客
    三子博客 : 回复

    这个很强大,正在学习制作主题后台设置!!

发表评论