对于一个功能强大的主题,自定义字段必不可少,前面提供的类文件可供在文章、页面以及各个自定义文章类型的编辑页面添加自定义字段。对于wp来说,核心基本就两个内容:文章、分类法。所以对于分类法,我们也需要用到自定义字段。
应用:分类的关键次、描述、title、封面图片。等等其它一些特殊表单。如图:
分析:1、要给分类添加字段,首先面临一个问题就是数据的存储,在wordpress的数据表中,对于post等有专门的post_meta表来存储字段信息,但是分类没有,所以有两种选择:一、存储在_options表中;二、新建一个数据表。具体使用哪种方法呢?如果分类比较少,字段比较少存储在_options表中就可以了,如果分类数量多,添加的字段多,那么建议新建一个数据表来存储分类的字段信息。在后面的教程中,这两种办法都将会讲到。
2、对于分类,有两个页面需要添加字段的表单,一、创建分类;二、编辑分类;所以保存数据也应该有两个部分,一、新建分类;二、重新编辑分类。
函数介绍:
一、给分类添加字段的有关函数资料位于:wp-admin/edit-tags.php文件和wp-admin/edit-tag-form.php文件中:在wp-admin/edit-tags.php文件中可以看到,在输出了父级、描述几个默认项后有代码如下:
if ( ! is_taxonomy_hierarchical($taxonomy) ) do_action('add_tag_form_fields', $taxonomy); do_action($taxonomy . '_add_form_fields', $taxonomy); function ashu_add_cat_field(){ echo '这里是阿树工作室的分类添加页面,www.shouce.ren'; } add_action('category_add_form_fields','ashu_add_cat_field'); <?php // Back compat hooks if ( 'category' == $taxonomy ) do_action('edit_category_form_fields', $tag); elseif ( 'link_category' == $taxonomy ) do_action('edit_link_category_form_fields', $tag); else do_action('edit_tag_form_fields', $tag); do_action($taxonomy . '_edit_form_fields', $tag, $taxonomy); ?> function ashu_edit_cat_field(){ echo '<tr><th>分类编辑页面</th><td>这里是阿树工作室的分类的编辑页面,www.shouce.ren</td></tr>'; } add_action('category_edit_form_fields','ashu_edit_cat_field');
我们主要就是通过$taxonomy.'_add_form_fields'钩子来输出自定义字段,$taxonomy对应于需要添加字段的分类法,比如往默认的分类法category页面添加字段应该使用钩子:category_add_form_fields。对于自定义分类法的介绍请参考本站前面的文章自定义分类法。(在上面代码的后面还有一段代码是通过分别判断分类法是否为 默认分类、标签、链接分类然后执行对应钩子)。
尝试:我们可以尝试一下使用这个钩子(以默认的twenty ten主题为例),在functions.php文件中添加代码:
if ( ! is_taxonomy_hierarchical($taxonomy) ) do_action('add_tag_form_fields', $taxonomy); do_action($taxonomy . '_add_form_fields', $taxonomy); function ashu_add_cat_field(){ echo '这里是阿树工作室的分类添加页面,www.shouce.ren'; } add_action('category_add_form_fields','ashu_add_cat_field'); <?php // Back compat hooks if ( 'category' == $taxonomy ) do_action('edit_category_form_fields', $tag); elseif ( 'link_category' == $taxonomy ) do_action('edit_link_category_form_fields', $tag); else do_action('edit_tag_form_fields', $tag); do_action($taxonomy . '_edit_form_fields', $tag, $taxonomy); ?> function ashu_edit_cat_field(){ echo '<tr><th>分类编辑页面</th><td>这里是阿树工作室的分类的编辑页面,www.shouce.ren</td></tr>'; } add_action('category_edit_form_fields','ashu_edit_cat_field');
然后查看分类添加页面效果:
然而我们点击编辑某个分类,在分类的编辑页面是没有输出这句话的,这个我们前面已经介绍了。
二、再看edit-tag-form.php文件,找到输出分类编辑页面的代码,可以看到,在输出默认项之后有代码如下:
if ( ! is_taxonomy_hierarchical($taxonomy) ) do_action('add_tag_form_fields', $taxonomy); do_action($taxonomy . '_add_form_fields', $taxonomy); function ashu_add_cat_field(){ echo '这里是阿树工作室的分类添加页面,www.shouce.ren'; } add_action('category_add_form_fields','ashu_add_cat_field'); <?php // Back compat hooks if ( 'category' == $taxonomy ) do_action('edit_category_form_fields', $tag); elseif ( 'link_category' == $taxonomy ) do_action('edit_link_category_form_fields', $tag); else do_action('edit_tag_form_fields', $tag); do_action($taxonomy . '_edit_form_fields', $tag, $taxonomy); ?> function ashu_edit_cat_field(){ echo '<tr><th>分类编辑页面</th><td>这里是阿树工作室的分类的编辑页面,www.shouce.ren</td></tr>'; } add_action('category_edit_form_fields','ashu_edit_cat_field');
类似的我们可以使用$taxonomy . '_edit_form_fields'函数来输出代码。不过需要注意的是:分类的添加页面是<div>布局,而分类的编辑页面是<table>布局,重点是编辑页面的table布局,得输出表格的代码。
尝试二:在functions.php文件中再添加代码,
if ( ! is_taxonomy_hierarchical($taxonomy) ) do_action('add_tag_form_fields', $taxonomy); do_action($taxonomy . '_add_form_fields', $taxonomy); function ashu_add_cat_field(){ echo '这里是阿树工作室的分类添加页面,www.shouce.ren'; } add_action('category_add_form_fields','ashu_add_cat_field'); <?php // Back compat hooks if ( 'category' == $taxonomy ) do_action('edit_category_form_fields', $tag); elseif ( 'link_category' == $taxonomy ) do_action('edit_link_category_form_fields', $tag); else do_action('edit_tag_form_fields', $tag); do_action($taxonomy . '_edit_form_fields', $tag, $taxonomy); ?> function ashu_edit_cat_field(){ echo '<tr><th>分类编辑页面</th><td>这里是阿树工作室的分类的编辑页面,www.shouce.ren</td></tr>'; } add_action('category_edit_form_fields','ashu_edit_cat_field');
此时查看点击一个分类的编辑页面:
至此我们成功往分类的添加、编辑页面输出了内容,我们可以把输出内容改成需要输出的自定义表单项即可。
预告:
接下来将讲述输出表单项,以及数据的存储、更新。