> WordPress中文手册 > wordpress进阶教程(十四):给分类添加字段类文件

在这篇教程作者将要结束给WordPress分类添加字段的教程,教程最后当然是送出类文件,前面也放出过两个类文件:主题后台、文章自定义字段。

但是这个类文件不一样,该类文件为阿树工作室原创,所以有不完美的地方,比如没有提供图片上传的,不过如果读者需要,参考一下前面主题后台和文章自定义字段的两个类文件,完全可以自己添加进来。

版本控制:

2013.07.08,版本 1.0

1、增加删除分类删除数据功能

2、增加和更新-编辑器、图片上传、复选框等功能

类文件代码-2013年7月8日更新:

<?php /* wordpress分类法自定义字段类文件 Version: 1.0 Author: 树是我的朋友 Author URI: Http://www.dba.cn License: /courses/highgrade/313.html */ class ashu_taxonomy_feild{ var $options; var $taxonomyinfo; function ashu_taxonomy_feild($options,$taxonomyinfo){ $this->options = $options; $this->taxonomyinfo = $taxonomyinfo; foreach($this->taxonomyinfo as $taxonomy){ add_action($taxonomy.'_add_form_fields', array(&$this, 'taxonomy_fields_adds'), 10, 2); add_action($taxonomy.'_edit_form_fields', array(&$this, 'taxonomy_metabox_edit'), 10, 2); add_action('created_'.$taxonomy, array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('edited_'.$taxonomy,array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('admin_menu', array(&$this, 'init_taxonomy')); add_action('delete_'.$taxonomy, array(&$this,'delete_taxonomy_metadata'),10,1); } } function init_taxonomy(){ if(basename( $_SERVER['PHP_SELF']) == "edit-tags.php") { //注意加载的脚本的url wp_enqueue_style('cate_fields_css', TEMJS_URI. 'cate_fields.css'); wp_enqueue_script('cate_fields_js',TEMJS_URI. 'cate_fields.js'); wp_enqueue_script('thickbox'); wp_enqueue_style('thickbox'); } } /*********添加分类页面*******/ function taxonomy_fields_adds($tag){ foreach($this->options as $option){ if( (!isset($option["edit_only"]) || !$option["edit_only"] ) ){ if (method_exists($this, $option['type'])){ echo '<div class="form-field">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; $this->$option['type']($option); echo '</div>'; } } } } /*************编辑分类页面*****************/ function taxonomy_metabox_edit($tag){ foreach($this->options as $option){ if (method_exists($this, $option['type'])){ if(get_term_meta($tag->term_id , $option['id']) !== ""){ $option['std'] = get_term_meta($tag->term_id,$option['id'], true); } echo '<tr class="form-field">'; echo '<th scope="row" valign="top">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; echo '</th>'; echo '<td>'; $this->$option['type']($option); echo '</td>'; echo '</tr>'; } } } /**********删除数据******/ function delete_taxonomy_metadata($term_id){ foreach($this->options as $option){ delete_term_meta($term_id,$option['id']); } } /**************保存数据*****************/ function save_taxonomy_metadata($term_id){ foreach($this->options as $option){ if(isset($_POST[$option['id']])){ if(!current_user_can('manage_categories')){ return $term_id ; } 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_term_meta($term_id , $option['id']) == "") add_term_meta($term_id , $option['id'], $data, true); elseif($data != get_term_meta($term_id , $option['id'], true)) update_term_meta($term_id , $option['id'], $data); elseif($data == "") delete_term_meta($term_id , $option['id'], get_term_meta($term_id , $option['id'], true)); } } } /******提示信息******/ function info($option){ echo '<p>'.$option['desc'].'</p>'; } /*******文本输入框text*******/ function text($option){ echo '<input type="text" size="'.$option['size'].'" value="'; echo $option['std']; echo '" id="'.$option['id'].'" name="'.$option['id'].'"/>'; echo '<p>'.$option['desc'].'</p>'; } /******文本域***********/ function textarea($option){ echo '<textarea cols="40" rows="5" id="'.$option['id'].'" name="'.$option['id'].'">'.$option['std'].'</textarea>'; echo '<p>'.$option['desc'].'</p>'; } /**********单选框************/ function radio( $option ){ foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( $option['std'] == $key) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="radio" class="kcheck" value="'.$key.'" name="'.$option['id'].'"/>'.$value; } } /**************复选框*******************/ function checkbox($option) { foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( is_array($option['std']) && in_array($key,$option['std'])) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="checkbox" class="kcheck" value="'.$key.'" name="'.$option['id'].'[]"/>'.$value; } } /***********下拉选择***********/ function dropdown($option){ if($option['subtype'] == 'page') { $select = 'Select page'; $entries = get_pages('title_li=&orderby=name'); }else if($option['subtype'] == 'sidebar'){ global $wp_registered_sidebars; $select = 'Select a special sidebar'; $entries = $wp_registered_sidebars; }else if($option['subtype'] == 'cat'){ $select = 'Select category'; $entries = get_categories('title_li=&orderby=name&hide_empty=0'); }else{ $select = 'Select...'; $entries = $option['subtype']; } echo '<select class="postform" id="'. $option['id'] .'" name="'. $option['id'] .'"> '; echo '<option value="">请选择...</option> '; foreach ($entries as $key => $entry){ if($option['subtype'] == 'page'){ $id = $entry->ID; $title = $entry->post_title; }else if($option['subtype'] == 'cat'){ $id = $entry->term_id; $title = $entry->name; }else if($option['subtype'] == 'sidebar'){ $id = $entry['id']; $title = $entry['name']; }else{ $id = $key; $title = $entry; } $selected=''; if( $option['std'] == $id ){ $selected = "selected='selected'"; } echo"<option $selected value='". $id ."'>". $title."</option>"; } echo '</select>'; echo '<p>'.$option['desc'].'</p>'; } /***************图片上传**********************/ function upload($option){ $previmg = ''; if($option['std'] != ''){$prevImg = '<img src='.$option['std'].' alt="" />';} echo '<div class="preview_pic_optionspage" id="'.$option['id'].'_div">'.$prevImg.'</div>'; echo $option['desc'].'<br/>'; echo '<input type="text" size="60" value="'.$option['std'].'" name="'.$option['id'].'" class="upload_pic_input" />'; echo '&nbsp;<a onclick="return false;" title="" class="cat_up button thickbox" id="'.$option['id'].'" href="media-upload.php?type=image&amp;TB_iframe=true">Insert Image</a>'; } /*******************编辑器****************************/ function tinymce($option){ wp_editor( $option['std'], $option['id'],$settings=array('tinymce'=>1,'media_buttons'=>0,) ); } } ?> $options = array(); $taxonomyinfo = array('category'); $options[] = array( "id" => "_notice", "desc" => '提示信息内容', "type" => "info"); $options[] = array( "name" => "分类关键词", "desc" => "", "id" => "_seo_keywords", "std" => "", "edit_only"=>false, "size" => 40, "type" => "text"); $options[] = array( "name" => "文本域测试", "desc" => "描述信息", "id" => "_textarea", "std" => "", "edit_only"=>false, "size" => 40, "type" => "textarea"); $options[] = array( "name" => "单选框测试", "desc" => "请选择性别", "id" => "_radio", "std" => "sprother", "edit_only"=>false, "buttons" => array( 'man'=>'男性', 'woman'=>'女性', 'sprother'=>'中性' ), "type" => "radio"); $options[] = array( "name" => "复选框--你喜欢哪几个", "id" => "_checkbox", "std" => "", "buttons" => array( 'chun'=>'春哥', 'zeng'=>'曾哥', 'zhu'=>'著姐', 'feng'=>'玉凤', 'fu'=>'芙蓉' ), "edit_only"=>false, "type" => "checkbox"); $options[] = array( "name" => "下拉框框测试-页面", "desc" => "描述信息", "id" => "_drop_page", "std" => "", "edit_only"=>false, "subtype" => 'page', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-分类", "desc" => "描述信息", "id" => "_drop_cat", "std" => "", "edit_only"=>false, "subtype" => 'cat', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-侧边栏", "desc" => "描述信息", "id" => "_drop_sidebar", "std" => "", "edit_only"=>false, "subtype" => 'sidebar', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-自定义", "desc" => "描述信息", "id" => "_drop_custom", "std" => "", "edit_only"=>false, "subtype" => array( 'apple'=>'苹果', 'banana'=>'香蕉', 'orange'=>'桔子', ), "type" => "dropdown"); $options[] = array( "name" => "上传图片测试", "desc" => "", "id" => "_upload", "std" => "", "edit_only"=>true, "type" => "upload" ); $options[] = array( "name" => "tinymce编辑器测试", "desc" => "", "id" => "_tinymce", "std" => "", "edit_only"=>true, "type" => "tinymce" ); $new_taxonomy_feild = new ashu_taxonomy_feild($options, $taxonomyinfo); include_once(get_template_directory() .'/include/class-taxonomy-feild.php'); include_once(get_template_directory() .'/include/simple-term-meta.php'); $_seo_keywords = get_term_meta( $cat->term_id, '_seo_keywords',true );

下面提供类文件下载(共两个文件):wordpress给分类添加字段类文件其中一个类文件,一个simp-term-meta.PHP文件

配置示例:

注意:

  1. 其中配置数组中的edit_only参数如果设置为true,则该项将只会在分类的编辑页面出现,主要考虑是,在分类的添加页面,编辑器或者图片上传可能太大,所以一般将编辑器和图片上传设置为只在编辑页面出现。
  2. 复选框保存的数据为数组
<?php /* wordpress分类法自定义字段类文件 Version: 1.0 Author: 树是我的朋友 Author URI: http://www.dba.cn License: /courses/highgrade/313.html */ class ashu_taxonomy_feild{ var $options; var $taxonomyinfo; function ashu_taxonomy_feild($options,$taxonomyinfo){ $this->options = $options; $this->taxonomyinfo = $taxonomyinfo; foreach($this->taxonomyinfo as $taxonomy){ add_action($taxonomy.'_add_form_fields', array(&$this, 'taxonomy_fields_adds'), 10, 2); add_action($taxonomy.'_edit_form_fields', array(&$this, 'taxonomy_metabox_edit'), 10, 2); add_action('created_'.$taxonomy, array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('edited_'.$taxonomy,array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('admin_menu', array(&$this, 'init_taxonomy')); add_action('delete_'.$taxonomy, array(&$this,'delete_taxonomy_metadata'),10,1); } } function init_taxonomy(){ if(basename( $_SERVER['PHP_SELF']) == "edit-tags.php") { //注意加载的脚本的url wp_enqueue_style('cate_fields_css', TEMJS_URI. 'cate_fields.css'); wp_enqueue_script('cate_fields_js',TEMJS_URI. 'cate_fields.js'); wp_enqueue_script('thickbox'); wp_enqueue_style('thickbox'); } } /*********添加分类页面*******/ function taxonomy_fields_adds($tag){ foreach($this->options as $option){ if( (!isset($option["edit_only"]) || !$option["edit_only"] ) ){ if (method_exists($this, $option['type'])){ echo '<div class="form-field">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; $this->$option['type']($option); echo '</div>'; } } } } /*************编辑分类页面*****************/ function taxonomy_metabox_edit($tag){ foreach($this->options as $option){ if (method_exists($this, $option['type'])){ if(get_term_meta($tag->term_id , $option['id']) !== ""){ $option['std'] = get_term_meta($tag->term_id,$option['id'], true); } echo '<tr class="form-field">'; echo '<th scope="row" valign="top">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; echo '</th>'; echo '<td>'; $this->$option['type']($option); echo '</td>'; echo '</tr>'; } } } /**********删除数据******/ function delete_taxonomy_metadata($term_id){ foreach($this->options as $option){ delete_term_meta($term_id,$option['id']); } } /**************保存数据*****************/ function save_taxonomy_metadata($term_id){ foreach($this->options as $option){ if(isset($_POST[$option['id']])){ if(!current_user_can('manage_categories')){ return $term_id ; } 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_term_meta($term_id , $option['id']) == "") add_term_meta($term_id , $option['id'], $data, true); elseif($data != get_term_meta($term_id , $option['id'], true)) update_term_meta($term_id , $option['id'], $data); elseif($data == "") delete_term_meta($term_id , $option['id'], get_term_meta($term_id , $option['id'], true)); } } } /******提示信息******/ function info($option){ echo '<p>'.$option['desc'].'</p>'; } /*******文本输入框text*******/ function text($option){ echo '<input type="text" size="'.$option['size'].'" value="'; echo $option['std']; echo '" id="'.$option['id'].'" name="'.$option['id'].'"/>'; echo '<p>'.$option['desc'].'</p>'; } /******文本域***********/ function textarea($option){ echo '<textarea cols="40" rows="5" id="'.$option['id'].'" name="'.$option['id'].'">'.$option['std'].'</textarea>'; echo '<p>'.$option['desc'].'</p>'; } /**********单选框************/ function radio( $option ){ foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( $option['std'] == $key) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="radio" class="kcheck" value="'.$key.'" name="'.$option['id'].'"/>'.$value; } } /**************复选框*******************/ function checkbox($option) { foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( is_array($option['std']) && in_array($key,$option['std'])) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="checkbox" class="kcheck" value="'.$key.'" name="'.$option['id'].'[]"/>'.$value; } } /***********下拉选择***********/ function dropdown($option){ if($option['subtype'] == 'page') { $select = 'Select page'; $entries = get_pages('title_li=&orderby=name'); }else if($option['subtype'] == 'sidebar'){ global $wp_registered_sidebars; $select = 'Select a special sidebar'; $entries = $wp_registered_sidebars; }else if($option['subtype'] == 'cat'){ $select = 'Select category'; $entries = get_categories('title_li=&orderby=name&hide_empty=0'); }else{ $select = 'Select...'; $entries = $option['subtype']; } echo '<select class="postform" id="'. $option['id'] .'" name="'. $option['id'] .'"> '; echo '<option value="">请选择...</option> '; foreach ($entries as $key => $entry){ if($option['subtype'] == 'page'){ $id = $entry->ID; $title = $entry->post_title; }else if($option['subtype'] == 'cat'){ $id = $entry->term_id; $title = $entry->name; }else if($option['subtype'] == 'sidebar'){ $id = $entry['id']; $title = $entry['name']; }else{ $id = $key; $title = $entry; } $selected=''; if( $option['std'] == $id ){ $selected = "selected='selected'"; } echo"<option $selected value='". $id ."'>". $title."</option>"; } echo '</select>'; echo '<p>'.$option['desc'].'</p>'; } /***************图片上传**********************/ function upload($option){ $prevImg = ''; if($option['std'] != ''){$prevImg = '<img src='.$option['std'].' alt="" />';} echo '<div class="preview_pic_optionspage" id="'.$option['id'].'_div">'.$prevImg.'</div>'; echo $option['desc'].'<br/>'; echo '<input type="text" size="60" value="'.$option['std'].'" name="'.$option['id'].'" class="upload_pic_input" />'; echo '&nbsp;<a onclick="return false;" title="" class="cat_up button thickbox" id="'.$option['id'].'" href="media-upload.php?type=image&amp;TB_iframe=true">Insert Image</a>'; } /*******************编辑器****************************/ function tinymce($option){ wp_editor( $option['std'], $option['id'],$settings=array('tinymce'=>1,'media_buttons'=>0,) ); } } ?> $options = array(); $taxonomyinfo = array('category'); $options[] = array( "id" => "_notice", "desc" => '提示信息内容', "type" => "info"); $options[] = array( "name" => "分类关键词", "desc" => "", "id" => "_seo_keywords", "std" => "", "edit_only"=>false, "size" => 40, "type" => "text"); $options[] = array( "name" => "文本域测试", "desc" => "描述信息", "id" => "_textarea", "std" => "", "edit_only"=>false, "size" => 40, "type" => "textarea"); $options[] = array( "name" => "单选框测试", "desc" => "请选择性别", "id" => "_radio", "std" => "sprother", "edit_only"=>false, "buttons" => array( 'man'=>'男性', 'woman'=>'女性', 'sprother'=>'中性' ), "type" => "radio"); $options[] = array( "name" => "复选框--你喜欢哪几个", "id" => "_checkbox", "std" => "", "buttons" => array( 'chun'=>'春哥', 'zeng'=>'曾哥', 'zhu'=>'著姐', 'feng'=>'玉凤', 'fu'=>'芙蓉' ), "edit_only"=>false, "type" => "checkbox"); $options[] = array( "name" => "下拉框框测试-页面", "desc" => "描述信息", "id" => "_drop_page", "std" => "", "edit_only"=>false, "subtype" => 'page', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-分类", "desc" => "描述信息", "id" => "_drop_cat", "std" => "", "edit_only"=>false, "subtype" => 'cat', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-侧边栏", "desc" => "描述信息", "id" => "_drop_sidebar", "std" => "", "edit_only"=>false, "subtype" => 'sidebar', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-自定义", "desc" => "描述信息", "id" => "_drop_custom", "std" => "", "edit_only"=>false, "subtype" => array( 'apple'=>'苹果', 'banana'=>'香蕉', 'orange'=>'桔子', ), "type" => "dropdown"); $options[] = array( "name" => "上传图片测试", "desc" => "", "id" => "_upload", "std" => "", "edit_only"=>true, "type" => "upload" ); $options[] = array( "name" => "tinymce编辑器测试", "desc" => "", "id" => "_tinymce", "std" => "", "edit_only"=>true, "type" => "tinymce" ); $new_taxonomy_feild = new ashu_taxonomy_feild($options, $taxonomyinfo); include_once(get_template_directory() .'/include/class-taxonomy-feild.php'); include_once(get_template_directory() .'/include/simple-term-meta.php'); $_seo_keywords = get_term_meta( $cat->term_id, '_seo_keywords',true );

使用方法:

1、解压之后得到两个文件,在主题中包含这两个文件,分别是文件和simple-term-meta.php文件。

2、在你的主题中包含这两个文件这两个文件(如阿树将文件放在主题的include文件夹中,则使用如下代码):

<?php /* wordpress分类法自定义字段类文件 Version: 1.0 Author: 树是我的朋友 Author URI: http://www.dba.cn License: /courses/highgrade/313.html */ class ashu_taxonomy_feild{ var $options; var $taxonomyinfo; function ashu_taxonomy_feild($options,$taxonomyinfo){ $this->options = $options; $this->taxonomyinfo = $taxonomyinfo; foreach($this->taxonomyinfo as $taxonomy){ add_action($taxonomy.'_add_form_fields', array(&$this, 'taxonomy_fields_adds'), 10, 2); add_action($taxonomy.'_edit_form_fields', array(&$this, 'taxonomy_metabox_edit'), 10, 2); add_action('created_'.$taxonomy, array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('edited_'.$taxonomy,array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('admin_menu', array(&$this, 'init_taxonomy')); add_action('delete_'.$taxonomy, array(&$this,'delete_taxonomy_metadata'),10,1); } } function init_taxonomy(){ if(basename( $_SERVER['PHP_SELF']) == "edit-tags.php") { //注意加载的脚本的url wp_enqueue_style('cate_fields_css', TEMJS_URI. 'cate_fields.css'); wp_enqueue_script('cate_fields_js',TEMJS_URI. 'cate_fields.js'); wp_enqueue_script('thickbox'); wp_enqueue_style('thickbox'); } } /*********添加分类页面*******/ function taxonomy_fields_adds($tag){ foreach($this->options as $option){ if( (!isset($option["edit_only"]) || !$option["edit_only"] ) ){ if (method_exists($this, $option['type'])){ echo '<div class="form-field">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; $this->$option['type']($option); echo '</div>'; } } } } /*************编辑分类页面*****************/ function taxonomy_metabox_edit($tag){ foreach($this->options as $option){ if (method_exists($this, $option['type'])){ if(get_term_meta($tag->term_id , $option['id']) !== ""){ $option['std'] = get_term_meta($tag->term_id,$option['id'], true); } echo '<tr class="form-field">'; echo '<th scope="row" valign="top">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; echo '</th>'; echo '<td>'; $this->$option['type']($option); echo '</td>'; echo '</tr>'; } } } /**********删除数据******/ function delete_taxonomy_metadata($term_id){ foreach($this->options as $option){ delete_term_meta($term_id,$option['id']); } } /**************保存数据*****************/ function save_taxonomy_metadata($term_id){ foreach($this->options as $option){ if(isset($_POST[$option['id']])){ if(!current_user_can('manage_categories')){ return $term_id ; } 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_term_meta($term_id , $option['id']) == "") add_term_meta($term_id , $option['id'], $data, true); elseif($data != get_term_meta($term_id , $option['id'], true)) update_term_meta($term_id , $option['id'], $data); elseif($data == "") delete_term_meta($term_id , $option['id'], get_term_meta($term_id , $option['id'], true)); } } } /******提示信息******/ function info($option){ echo '<p>'.$option['desc'].'</p>'; } /*******文本输入框text*******/ function text($option){ echo '<input type="text" size="'.$option['size'].'" value="'; echo $option['std']; echo '" id="'.$option['id'].'" name="'.$option['id'].'"/>'; echo '<p>'.$option['desc'].'</p>'; } /******文本域***********/ function textarea($option){ echo '<textarea cols="40" rows="5" id="'.$option['id'].'" name="'.$option['id'].'">'.$option['std'].'</textarea>'; echo '<p>'.$option['desc'].'</p>'; } /**********单选框************/ function radio( $option ){ foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( $option['std'] == $key) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="radio" class="kcheck" value="'.$key.'" name="'.$option['id'].'"/>'.$value; } } /**************复选框*******************/ function checkbox($option) { foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( is_array($option['std']) && in_array($key,$option['std'])) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="checkbox" class="kcheck" value="'.$key.'" name="'.$option['id'].'[]"/>'.$value; } } /***********下拉选择***********/ function dropdown($option){ if($option['subtype'] == 'page') { $select = 'Select page'; $entries = get_pages('title_li=&orderby=name'); }else if($option['subtype'] == 'sidebar'){ global $wp_registered_sidebars; $select = 'Select a special sidebar'; $entries = $wp_registered_sidebars; }else if($option['subtype'] == 'cat'){ $select = 'Select category'; $entries = get_categories('title_li=&orderby=name&hide_empty=0'); }else{ $select = 'Select...'; $entries = $option['subtype']; } echo '<select class="postform" id="'. $option['id'] .'" name="'. $option['id'] .'"> '; echo '<option value="">请选择...</option> '; foreach ($entries as $key => $entry){ if($option['subtype'] == 'page'){ $id = $entry->ID; $title = $entry->post_title; }else if($option['subtype'] == 'cat'){ $id = $entry->term_id; $title = $entry->name; }else if($option['subtype'] == 'sidebar'){ $id = $entry['id']; $title = $entry['name']; }else{ $id = $key; $title = $entry; } $selected=''; if( $option['std'] == $id ){ $selected = "selected='selected'"; } echo"<option $selected value='". $id ."'>". $title."</option>"; } echo '</select>'; echo '<p>'.$option['desc'].'</p>'; } /***************图片上传**********************/ function upload($option){ $prevImg = ''; if($option['std'] != ''){$prevImg = '<img src='.$option['std'].' alt="" />';} echo '<div class="preview_pic_optionspage" id="'.$option['id'].'_div">'.$prevImg.'</div>'; echo $option['desc'].'<br/>'; echo '<input type="text" size="60" value="'.$option['std'].'" name="'.$option['id'].'" class="upload_pic_input" />'; echo '&nbsp;<a onclick="return false;" title="" class="cat_up button thickbox" id="'.$option['id'].'" href="media-upload.php?type=image&amp;TB_iframe=true">Insert Image</a>'; } /*******************编辑器****************************/ function tinymce($option){ wp_editor( $option['std'], $option['id'],$settings=array('tinymce'=>1,'media_buttons'=>0,) ); } } ?> $options = array(); $taxonomyinfo = array('category'); $options[] = array( "id" => "_notice", "desc" => '提示信息内容', "type" => "info"); $options[] = array( "name" => "分类关键词", "desc" => "", "id" => "_seo_keywords", "std" => "", "edit_only"=>false, "size" => 40, "type" => "text"); $options[] = array( "name" => "文本域测试", "desc" => "描述信息", "id" => "_textarea", "std" => "", "edit_only"=>false, "size" => 40, "type" => "textarea"); $options[] = array( "name" => "单选框测试", "desc" => "请选择性别", "id" => "_radio", "std" => "sprother", "edit_only"=>false, "buttons" => array( 'man'=>'男性', 'woman'=>'女性', 'sprother'=>'中性' ), "type" => "radio"); $options[] = array( "name" => "复选框--你喜欢哪几个", "id" => "_checkbox", "std" => "", "buttons" => array( 'chun'=>'春哥', 'zeng'=>'曾哥', 'zhu'=>'著姐', 'feng'=>'玉凤', 'fu'=>'芙蓉' ), "edit_only"=>false, "type" => "checkbox"); $options[] = array( "name" => "下拉框框测试-页面", "desc" => "描述信息", "id" => "_drop_page", "std" => "", "edit_only"=>false, "subtype" => 'page', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-分类", "desc" => "描述信息", "id" => "_drop_cat", "std" => "", "edit_only"=>false, "subtype" => 'cat', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-侧边栏", "desc" => "描述信息", "id" => "_drop_sidebar", "std" => "", "edit_only"=>false, "subtype" => 'sidebar', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-自定义", "desc" => "描述信息", "id" => "_drop_custom", "std" => "", "edit_only"=>false, "subtype" => array( 'apple'=>'苹果', 'banana'=>'香蕉', 'orange'=>'桔子', ), "type" => "dropdown"); $options[] = array( "name" => "上传图片测试", "desc" => "", "id" => "_upload", "std" => "", "edit_only"=>true, "type" => "upload" ); $options[] = array( "name" => "tinymce编辑器测试", "desc" => "", "id" => "_tinymce", "std" => "", "edit_only"=>true, "type" => "tinymce" ); $new_taxonomy_feild = new ashu_taxonomy_feild($options, $taxonomyinfo); include_once(get_template_directory() .'/include/class-taxonomy-feild.php'); include_once(get_template_directory() .'/include/simple-term-meta.php'); $_seo_keywords = get_term_meta( $cat->term_id, '_seo_keywords',true );

2、类文件class-taxonomy-feild.php的后面带有类文件的实例化配置方法,按照需求更改即可。

3、获取数据,使用get_term_meta函数,跟get_post_meta函数类似。以上面示例中,分类关键词的获取为例:

<?php /* wordpress分类法自定义字段类文件 Version: 1.0 Author: 树是我的朋友 Author URI: http://www.dba.cn License: /courses/highgrade/313.html */ class ashu_taxonomy_feild{ var $options; var $taxonomyinfo; function ashu_taxonomy_feild($options,$taxonomyinfo){ $this->options = $options; $this->taxonomyinfo = $taxonomyinfo; foreach($this->taxonomyinfo as $taxonomy){ add_action($taxonomy.'_add_form_fields', array(&$this, 'taxonomy_fields_adds'), 10, 2); add_action($taxonomy.'_edit_form_fields', array(&$this, 'taxonomy_metabox_edit'), 10, 2); add_action('created_'.$taxonomy, array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('edited_'.$taxonomy,array(&$this, 'save_taxonomy_metadata'), 10, 1); add_action('admin_menu', array(&$this, 'init_taxonomy')); add_action('delete_'.$taxonomy, array(&$this,'delete_taxonomy_metadata'),10,1); } } function init_taxonomy(){ if(basename( $_SERVER['PHP_SELF']) == "edit-tags.php") { //注意加载的脚本的url wp_enqueue_style('cate_fields_css', TEMJS_URI. 'cate_fields.css'); wp_enqueue_script('cate_fields_js',TEMJS_URI. 'cate_fields.js'); wp_enqueue_script('thickbox'); wp_enqueue_style('thickbox'); } } /*********添加分类页面*******/ function taxonomy_fields_adds($tag){ foreach($this->options as $option){ if( (!isset($option["edit_only"]) || !$option["edit_only"] ) ){ if (method_exists($this, $option['type'])){ echo '<div class="form-field">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; $this->$option['type']($option); echo '</div>'; } } } } /*************编辑分类页面*****************/ function taxonomy_metabox_edit($tag){ foreach($this->options as $option){ if (method_exists($this, $option['type'])){ if(get_term_meta($tag->term_id , $option['id']) !== ""){ $option['std'] = get_term_meta($tag->term_id,$option['id'], true); } echo '<tr class="form-field">'; echo '<th scope="row" valign="top">'; echo '<label for="'.$option['id'].'" >'.$option['name'].'</label>'; echo '</th>'; echo '<td>'; $this->$option['type']($option); echo '</td>'; echo '</tr>'; } } } /**********删除数据******/ function delete_taxonomy_metadata($term_id){ foreach($this->options as $option){ delete_term_meta($term_id,$option['id']); } } /**************保存数据*****************/ function save_taxonomy_metadata($term_id){ foreach($this->options as $option){ if(isset($_POST[$option['id']])){ if(!current_user_can('manage_categories')){ return $term_id ; } 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_term_meta($term_id , $option['id']) == "") add_term_meta($term_id , $option['id'], $data, true); elseif($data != get_term_meta($term_id , $option['id'], true)) update_term_meta($term_id , $option['id'], $data); elseif($data == "") delete_term_meta($term_id , $option['id'], get_term_meta($term_id , $option['id'], true)); } } } /******提示信息******/ function info($option){ echo '<p>'.$option['desc'].'</p>'; } /*******文本输入框text*******/ function text($option){ echo '<input type="text" size="'.$option['size'].'" value="'; echo $option['std']; echo '" id="'.$option['id'].'" name="'.$option['id'].'"/>'; echo '<p>'.$option['desc'].'</p>'; } /******文本域***********/ function textarea($option){ echo '<textarea cols="40" rows="5" id="'.$option['id'].'" name="'.$option['id'].'">'.$option['std'].'</textarea>'; echo '<p>'.$option['desc'].'</p>'; } /**********单选框************/ function radio( $option ){ foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( $option['std'] == $key) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="radio" class="kcheck" value="'.$key.'" name="'.$option['id'].'"/>'.$value; } } /**************复选框*******************/ function checkbox($option) { foreach( $option['buttons'] as $key=>$value ) { $checked =""; if( is_array($option['std']) && in_array($key,$option['std'])) { $checked = 'checked = "checked"'; } echo '<input '.$checked.' type="checkbox" class="kcheck" value="'.$key.'" name="'.$option['id'].'[]"/>'.$value; } } /***********下拉选择***********/ function dropdown($option){ if($option['subtype'] == 'page') { $select = 'Select page'; $entries = get_pages('title_li=&orderby=name'); }else if($option['subtype'] == 'sidebar'){ global $wp_registered_sidebars; $select = 'Select a special sidebar'; $entries = $wp_registered_sidebars; }else if($option['subtype'] == 'cat'){ $select = 'Select category'; $entries = get_categories('title_li=&orderby=name&hide_empty=0'); }else{ $select = 'Select...'; $entries = $option['subtype']; } echo '<select class="postform" id="'. $option['id'] .'" name="'. $option['id'] .'"> '; echo '<option value="">请选择...</option> '; foreach ($entries as $key => $entry){ if($option['subtype'] == 'page'){ $id = $entry->ID; $title = $entry->post_title; }else if($option['subtype'] == 'cat'){ $id = $entry->term_id; $title = $entry->name; }else if($option['subtype'] == 'sidebar'){ $id = $entry['id']; $title = $entry['name']; }else{ $id = $key; $title = $entry; } $selected=''; if( $option['std'] == $id ){ $selected = "selected='selected'"; } echo"<option $selected value='". $id ."'>". $title."</option>"; } echo '</select>'; echo '<p>'.$option['desc'].'</p>'; } /***************图片上传**********************/ function upload($option){ $prevImg = ''; if($option['std'] != ''){$prevImg = '<img src='.$option['std'].' alt="" />';} echo '<div class="preview_pic_optionspage" id="'.$option['id'].'_div">'.$prevImg.'</div>'; echo $option['desc'].'<br/>'; echo '<input type="text" size="60" value="'.$option['std'].'" name="'.$option['id'].'" class="upload_pic_input" />'; echo '&nbsp;<a onclick="return false;" title="" class="cat_up button thickbox" id="'.$option['id'].'" href="media-upload.php?type=image&amp;TB_iframe=true">Insert Image</a>'; } /*******************编辑器****************************/ function tinymce($option){ wp_editor( $option['std'], $option['id'],$settings=array('tinymce'=>1,'media_buttons'=>0,) ); } } ?> $options = array(); $taxonomyinfo = array('category'); $options[] = array( "id" => "_notice", "desc" => '提示信息内容', "type" => "info"); $options[] = array( "name" => "分类关键词", "desc" => "", "id" => "_seo_keywords", "std" => "", "edit_only"=>false, "size" => 40, "type" => "text"); $options[] = array( "name" => "文本域测试", "desc" => "描述信息", "id" => "_textarea", "std" => "", "edit_only"=>false, "size" => 40, "type" => "textarea"); $options[] = array( "name" => "单选框测试", "desc" => "请选择性别", "id" => "_radio", "std" => "sprother", "edit_only"=>false, "buttons" => array( 'man'=>'男性', 'woman'=>'女性', 'sprother'=>'中性' ), "type" => "radio"); $options[] = array( "name" => "复选框--你喜欢哪几个", "id" => "_checkbox", "std" => "", "buttons" => array( 'chun'=>'春哥', 'zeng'=>'曾哥', 'zhu'=>'著姐', 'feng'=>'玉凤', 'fu'=>'芙蓉' ), "edit_only"=>false, "type" => "checkbox"); $options[] = array( "name" => "下拉框框测试-页面", "desc" => "描述信息", "id" => "_drop_page", "std" => "", "edit_only"=>false, "subtype" => 'page', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-分类", "desc" => "描述信息", "id" => "_drop_cat", "std" => "", "edit_only"=>false, "subtype" => 'cat', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-侧边栏", "desc" => "描述信息", "id" => "_drop_sidebar", "std" => "", "edit_only"=>false, "subtype" => 'sidebar', "type" => "dropdown"); $options[] = array( "name" => "下拉框框测试-自定义", "desc" => "描述信息", "id" => "_drop_custom", "std" => "", "edit_only"=>false, "subtype" => array( 'apple'=>'苹果', 'banana'=>'香蕉', 'orange'=>'桔子', ), "type" => "dropdown"); $options[] = array( "name" => "上传图片测试", "desc" => "", "id" => "_upload", "std" => "", "edit_only"=>true, "type" => "upload" ); $options[] = array( "name" => "tinymce编辑器测试", "desc" => "", "id" => "_tinymce", "std" => "", "edit_only"=>true, "type" => "tinymce" ); $new_taxonomy_feild = new ashu_taxonomy_feild($options, $taxonomyinfo); include_once(get_template_directory() .'/include/class-taxonomy-feild.php'); include_once(get_template_directory() .'/include/simple-term-meta.php'); $_seo_keywords = get_term_meta( $cat->term_id, '_seo_keywords',true );

FAQ:

1、能正确显示表单,但是无法保存数据?

本站提供的simple-term-meta.php文件在安装激活主题的时候,会在数据库中添加一个_termmeta表用来保存数据,如果无法保存数据,八成是未新建该数据表,请重新激活主题。

2、下载的压缩包是空的?

请换浏览器、换电脑。

3、如何使用该类文件给自定义分类法添加字段?

在配置代码中$taxonomyinfo数组,加入你自己的自定义分类法。