wordpress进阶教程(十一):给分类页面添加字段(1)


对于一个功能强大的主题,自定义字段必不可少,前面提供的类文件可供在文章、页面以及各个自定义文章类型的编辑页面添加自定义字段。对于wp来说,核心基本就两个内容:文章、分类法。所以对于分类法,我们也需要用到自定义字段。

应用:分类的关键次、描述、title、封面图片。等等其它一些特殊表单。如图:

wordpress给分类添加字段

分析: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');  

然后查看分类添加页面效果:

wordpres分类页面添加字段

然而我们点击编辑某个分类,在分类的编辑页面是没有输出这句话的,这个我们前面已经介绍了。

、再看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');  

此时查看点击一个分类的编辑页面:

wordpress分类编辑页面添加表单

至此我们成功往分类的添加、编辑页面输出了内容,我们可以把输出内容改成需要输出的自定义表单项即可。

 

预告:

接下来将讲述输出表单项,以及数据的存储、更新。