• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > wordpress CMS主题制作 > wordpress自定义字段(7):创建自定义面版类文件

    wordpress自定义字段(7):创建自定义面版类文件

    作者: 分类:wordpress CMS主题制作 点击: 2,725 次
    wordpress CMS主题:ssmay主题

      通过前面几章有关wordpress自定义字段的介绍,我们了解了如何在wordpress主题中添加wordpress自定义字段面版,wordpress自定义面版包括:文本框、文本域、下拉框、单选框、复选框、编辑器、图片上传等一系列表单项,这样大大丰富了wordpress主题功能的。但是,这样有时在制作wordpress主题中,总是这样一点点地添加代码,有点麻烦,为了让这些wordpress自定义面版的功能能在以后的wordpress主题制作中方便地利用,我们可以把这些wordpress自定义字段代码封到一个类中,这样,想什么时候用就可以轻松地拿出来。下面,就一起来看看怎样创建wordpress自定义字段面版类文件及怎样使用。

      1、在主题文件夹下创建一个metabox.class.php类文件,然后通过dreamweaver打开这个metabox.class.php文件,将下面这段代码放进去:

      <?php
      //文章自定义字段类文倒插门
      class ashu_meta_box{
      var $options;
      var $boxinfo;

      //构造函数
      function ashu_meta_box($options,$boxinfo){
      $this->options = $options;
      $this->boxinfo = $boxinfo;

      add_action('admin_menu', array(&$this, 'init_boxes'));
      add_action('save_post', array(&$this, 'save_postdata'));
      }

      //初始化
      function init_boxes(){
      $this->add_script_and_styles();
      $this->create_meta_box();
      }

      //加载css和js脚本
      function add_script_and_styles(){
      if(basename( $_SERVER['PHP_SELF']) == "page.php"
      || basename( $_SERVER['PHP_SELF']) == "page-new.php"
      || basename( $_SERVER['PHP_SELF']) == "post-new.php"
      || basename( $_SERVER['PHP_SELF']) == "post.php"
      || basename( $_SERVER['PHP_SELF']) == "media-upload.php")
      {
      //注意加载的脚本的url
      wp_enqueue_style('metabox_fields_css', TEMJS_URI. 'metabox_fields.css');
      wp_enqueue_script('metabox_fields_js',TEMJS_URI. 'metabox_fields.js');
      wp_enqueue_style('thickbox');
      wp_enqueue_script('media-upload');
      wp_enqueue_script('thickbox');

      if(isset($_GET['hijack_target']))
      {
      add_action('admin_head', array(&$this,'add_hijack_var'));
      }
      }
      }

      /*************************/
      function add_hijack_var()
      {
      echo "<meta name='hijack_target' content='".$_GET['hijack_target']."' />\n";
      }

      //创建自定义面板
      function create_meta_box(){
      if ( function_exists('add_meta_box') && is_array($this->boxinfo['page']) )
      {
      foreach ($this->boxinfo['page'] as $area)
      {
      if ($this->boxinfo['callback'] == '') $this->boxinfo['callback'] = 'new_meta_boxes';

      add_meta_box(
      $this->boxinfo['id'],
      $this->boxinfo['title'],
      array(&$this, $this->boxinfo['callback']),
      $area, $this->boxinfo['context'],
      $this->boxinfo['priority']
      );
      }
      }
      }

      //创建自定义面板的显示函数
      function new_meta_boxes(){
      global $post;
      //根据类型调用显示函数
      foreach ($this->options as $option)
      {
      if (method_exists($this, $option['type']))
      {
      $meta_box_value = get_post_meta($post->ID, $option['id'], true);
      if($meta_box_value != "") $option['std'] = $meta_box_value;

      echo '<div class="alt kriesi_meta_box_alt meta_box_'.$option['type'].' meta_box_'.$this->boxinfo['context'].'">';
      $this->$option['type']($option);
      echo '</div>';
      }
      }

      //隐藏域
      echo'<input type="hidden" name="'.$this->boxinfo['id'].'_noncename" id="'.$this->boxinfo['id'].'_noncename" value="'.wp_create_nonce( 'ashumetabox' ).'" />';
      }

      //保存字段数据
      function save_postdata() {
      if( isset( $_POST['post_type'] ) && in_array($_POST['post_type'],$this->boxinfo['page'] ) && (isset($_POST['save']) || isset($_POST['publish']) ) ){
      $post_id = $_POST['post_ID'];

      foreach ($this->options as $option) {
      if (!wp_verify_nonce($_POST[$this->boxinfo['id'].'_noncename'], 'ashumetabox')) {
      return $post_id ;
      }
      //判断权限
      if ( 'page' == $_POST['post_type'] ) {
      if ( !current_user_can( 'edit_page', $post_id ))
      return $post_id ;
      } else {
      if ( !current_user_can( 'edit_post', $post_id ))
      return $post_id ;
      }
      //将预定义字符转换为html实体
      if( $option['type'] == 'tinymce' ){
      $data = stripslashes($_POST[$option['id']]);
      }elseif( $option['type'] == 'checkbox' ){
      $data = $_POST[$option['id']];
      }else{
      $data = htmlspecialchars($_POST[$option['id']], ENT_QUOTES,"UTF-8");
      }

      if(get_post_meta($post_id , $option['id']) == "")
      add_post_meta($post_id , $option['id'], $data, true);

      elseif($data != get_post_meta($post_id , $option['id'], true))
      update_post_meta($post_id , $option['id'], $data);

      elseif($data == "")
      delete_post_meta($post_id , $option['id'], get_post_meta($post_id , $option['id'], true));

      }
      }
      }
      //显示标题
      function title