自定义域的存在,让我们可以轻松对WordPress进行扩展,实现各种各样的功能,但是对于分类目录和标签而言,WordPress并没有提供类似的扩展功能,甚至在数据库中也没有存储分类目录/标签属性的数据表,这时,怎么才能够对分类目录/标签进行功能扩展呢?有人会说道,我们可以通过在WordPress中创建数据表来实现这些功能啊。但是,偶米工作室不同意此观点,数据库是WordPress的心脏,除非万不得已,不要对数据库“动手术”。那在不更改数据库的前提下,怎么才能够实现类似于自定义域的功能,对分类目录和标签进行功能扩展呢?偶米工作室慢慢为你解答。
在《独家经验:为 WordPress 分类目录添加个性化图像功能扩展》文章中,偶米工作室为大家提供了如何为分类目录添加个性化图像,看过这篇文章的朋友也发现了,教程中的方法是通过后台,将上传的自定义图像指定给任何一个分类目录的,也就是说,在仪表盘的分类目录菜单中,我们可以为为任何一个分类上传任意的图片,不限图片地址和格式。
今天,偶米工作室继续优化扩展该功能,实现了为分类目录、标签和自定义分类添加任意自定义属性,同时支持多种控件类型,例如:输入框、文本框、单选按钮、复选框、下拉列表、上传文件、上传图片、可视化编辑器、日期选择器、时间选择器、颜色选择器、分类下拉列表等,完全满足你功能扩展的需要。
1、获取类文件
这里,偶米工作室为你准备好了对分类目录、标签和自定义分类进行功能扩展所需要的必备的类文件,你只需要下载后将其放到主题文件夹中。
下载类文件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);
以上介绍完了,有什么疑问,大家可以一起探讨。
声明
本文版权归偶米工作室所有,转载引用本文请务必完整注明以下信息:
本文作者:偶米工作室
本文标题:扩展WordPress分类,添加可视化自定义字段功能
本文地址:http://www.oome.net/tax-meta-class.html