扩展WordPress分类,添加可视化自定义字段功能
2013-07-05

自定义域的存在,让我们可以轻松对WordPress进行扩展,实现各种各样的功能,但是对于分类目录和标签而言,WordPress并没有提供类似的扩展功能,甚至在数据库中也没有存储分类目录/标签属性的数据表,这时,怎么才能够对分类目录/标签进行功能扩展呢?有人会说道,我们可以通过在WordPress中创建数据表来实现这些功能啊。但是,偶米工作室不同意此观点,数据库是WordPress的心脏,除非万不得已,不要对数据库“动手术”。那在不更改数据库的前提下,怎么才能够实现类似于自定义域的功能,对分类目录和标签进行功能扩展呢?偶米工作室慢慢为你解答。

在《独家经验:为 WordPress 分类目录添加个性化图像功能扩展》文章中,偶米工作室为大家提供了如何为分类目录添加个性化图像,看过这篇文章的朋友也发现了,教程中的方法是通过后台,将上传的自定义图像指定给任何一个分类目录的,也就是说,在仪表盘的分类目录菜单中,我们可以为为任何一个分类上传任意的图片,不限图片地址和格式。

今天,偶米工作室继续优化扩展该功能,实现了为分类目录、标签和自定义分类添加任意自定义属性,同时支持多种控件类型,例如:输入框、文本框、单选按钮、复选框、下拉列表、上传文件、上传图片、可视化编辑器、日期选择器、时间选择器、颜色选择器、分类下拉列表等,完全满足你功能扩展的需要。

1、获取类文件

这里,偶米工作室为你准备好了对分类目录、标签和自定义分类进行功能扩展所需要的必备的类文件,你只需要下载后将其放到主题文件夹中。

[custom_button text="下载类文件" title="Custom Button" url="https://github.com/bainternet/Tax-Meta-Class" size="medium" bg_color="#FF5C00" text_color="#FFFFFF" align="left" target="_blank"]

2、为主题集成类文件

请使用以下代码在function.php文件中集成类文件

//集成类文件
require_once("Tax-meta-class/Tax-meta-class.php");

3、配置分类自定义域

/* 
* 配置分类自定义域
*/
$config = array( 
   'id' => 'demo_meta_box',                         // 属性框的ID,对于每个属性框有唯一值 
   'title' => 'Demo Meta Box',                      // 属性框标题
   'pages' => array('category'),                    // 分类名称,允许的类型是分类目录、标签和自定义分类
   'context' => 'normal',                           // 属性框显示的位置,可选项为正常(默认值)、高级、边栏和可选。 
   'fields' => array(),                             // 属性域列表(可以通过数组增加) 
   'local_images' => false,                         // 使用本地还是服务器图像Use local or hosted images (meta box images for add/remove) 
   'use_with_theme' => false                        //change path if used with theme set to true, false for a plugin or anything else for a custom path(default false). 
);
  • ‘id’ => (string), its left over form metabox class (not really used).
  • ‘title’ => (string), its left over form metabox class (not really used but will be implemented next update).
  • ‘pages’ => (array), taxonomy name, accept categories, post_tag and custom taxonomies.
  • ‘context’ => (string), its left over form metabox class (not really used).
  • ‘fields’ =>(array), list of meta fields (can be added by field arrays if you don’t like the oop way then just add your fields here).
  • ‘local_images’ => (boolean), Use local or hosted images (meta box images for add/remove).
  • ‘use_with_theme’ => (boolean), change path if used with theme set to true, false for a plugin or anything else for a custom path(default false).

4、初始自定义分类域

/* 
* 初始自定义分类域
*/
$my_meta = new Tax_Meta_Class($config);

5、增加需要的自定义域

/* 
* Add fields  
*/

//text field 
$my_meta->addText('text_field_id',array('name'=> 'My Text ')); 
//textarea field 
$my_meta->addTextarea('textarea_field_id',array('name'=> 'My Textarea ')); 
//checkbox field 
$my_meta->addCheckbox('checkbox_field_id',array('name'=> 'My Checkbox ')); 
//select field 
$my_meta->addSelect('select_field_id',array('selectkey1'=>'Select Value1','selectkey2'=>'Select Value2'),array('name'=> 'My select ', 'std'=> array('selectkey2'))); 
//radio field 
$my_meta->addRadio('radio_field_id',array('radiokey1'=>'Radio Value1','radiokey2'=>'Radio Value2'),array('name'=> 'My Radio Filed', 'std'=> array('radionkey2'))); 
//date field 
$my_meta->addDate('date_field_id',array('name'=> 'My Date ')); 
//Time field 
$my_meta->addTime('time_field_id',array('name'=> 'My Time ')); 
//Color field 
$my_meta->addColor('color_field_id',array('name'=> 'My Color ')); 
//Image field 
$my_meta->addImage('image_field_id',array('name'=> 'My Image ')); 
//file upload field 
$my_meta->addFile('file_field_id',array('name'=> 'My File ')); 
//wysiwyg field 
$my_meta->addWysiwyg('wysiwyg_field_id',array('name'=> 'My wysiwyg Editor ')); 
//taxonomy field 
$my_meta->addTaxonomy('taxonomy_field_id',array('taxonomy' => 'category'),array('name'=> 'My Taxonomy ')); 
//posts field 
$my_meta->addPosts('posts_field_id',array('post_type' => 'post'),array('name'=> 'My Posts ')); 

/* 
* To Create a reapeater Block first create an array of fields 
* use the same functions as above but add true as a last param 
*/

$repeater_fields[] = $my_meta->addText('re_text_field_id',array('name'=> 'My Text '),true); 
$repeater_fields[] = $my_meta->addTextarea('re_textarea_field_id',array('name'=> 'My Textarea '),true); 
$repeater_fields[] = $my_meta->addCheckbox('re_checkbox_field_id',array('name'=> 'My Checkbox '),true); 
$repeater_fields[] = $my_meta->addImage('image_field_id',array('name'=> 'My Image '),true); 

/* 
* Then just add the fields to the repeater block 
*/
//repeater block 
$my_meta->addRepeaterBlock('re_',array('inline' => true, 'name' => 'This is a Repeater Block','fields' => $repeater_fields));

最后,不要忘记关闭已声明的属性框

/* 
* Don't Forget to Close up the meta box deceleration 
*/
//Finish Taxonomy Extra fields 
Deceleration $my_meta->Finish();

当你完成这一步时,你就可以去WordPress后台进行设置了,其余的所有操作(例如数据保存)将由类执行,你不需要手工做这些。

设置完了,如何获取分类属性值?

接下来,我们将使用类文件中自带的属性函数来获取已经保存的数据。

例如:如果你想获取上面文本域的值,请使用以下函数:

$saved_data = get_tax_meta($term_id,'text_field_id'); 
echo $saved_data;

或者,我想统计分类的浏览数,可以使用以下代码:

//get current views count 
$saved_data = get_tax_meta($term_id,'MY_VIEWS_COUNTER'); 
//add 1 to current views count 
$saved_data++;     
//show views     
echo 'Views: '.$saved_data; 
//update views count 
update_tax_meta($term_id,'MY_VIEWS_COUNTER',$saved_data);

以上介绍完了,有什么疑问,大家可以一起探讨。

相关知识