填写您的邮件地址,订阅我们的精彩内容:

为WordPress分类、标签、taxonomy添加自己的meta附加字段

为WordPress分类添加meta自定义字段一文中我已经介绍了给分类添加附加字段的方法。延续这个思路,我们可以给分类、标签、其他你自己定义的taxonomy添加自己的meta附加字段。

在你的主题文件夹中找到functions.php,把下面的代码黏贴到末尾

add_action('category_add_form_fields','extra_term_fields');
add_action('edit_category_form_fields','extra_term_fields');
add_action('add_tag_form_fields','extra_term_fields');
add_action('edit_tag_form_fields','extra_term_fields');
add_action('{custom_taxonomy}_add_form_fields','extra_term_fields');
add_action('{custom_taxonomy}_edit_form_fields','extra_term_fields');
function extra_term_fields($term){
? $metas = array(
??? array('meta_name' => 'APP logo src','meta_key' => 'app_logo'),
??? array('meta_name' => 'iPhone download url','meta_key' => 'iphone_download'),
??? array('meta_name' => 'iPad download url','meta_key' => 'ipad_download')
? );
? $term_id = $term->term_id;
? foreach($metas as $meta) {
??? $meta_name = $meta['meta_name'];
??? $meta_key = $meta['meta_key'];
??? $meta_value = get_option("term_{$term_id}_meta_{$meta_key}");
??? ?>
<tr class="form-field">
? <th scope="row" valign="top"><label for="term_<?php echo $meta_key; ?>"><?php echo $meta_name; ?></label></th>
? <td><input type="text" name="term_meta_<?php echo $meta_key; ?>" id="term_<?php echo $meta_key; ?>" class="regular-text" value="<?php echo $meta_value; ?>"></td>
</tr>
??? <?php
? }
}

add_action('created_category','save_extra_term_fileds');
add_action('edited_category','save_extra_term_fileds');
add_action('created_post_tag','save_extra_term_fileds');
add_action('edited_post_tag','save_extra_term_fileds');
add_action('created_{custom_taxonomy}','save_extra_term_fileds');
add_action('edited_{custom_taxonomy}','save_extra_term_fileds');
function save_extra_term_fileds($term_id){
? if(!empty($_POST))foreach($_POST as $key => $value){
??? echo $key;
??? if(strpos($key,'term_meta_') === 0 && trim($value) != '') {
????? $meta_key = str_replace('term_meta_','',$key);
????? $meta_value = trim($value);
????? update_option("term_{$term_id}_meta_{$meta_key}",$meta_value) OR add_option("term_{$term_id}_meta_{$meta_key}",$meta_value);
??? }
? }
}

function get_term_meta($term_id,$meta_key){
? if(is_object($term_id))$term_id = $term_id->term_id;
? $term_meta = get_option("term_{$term_id}_meta_{$meta_key}");
? if($term_meta){
??? return $term_meta;
? }else{
??? return null;
? }
}

上面的代码中{custom_taxonomy}是指你自己定义的taxonomy的名称,要替换掉。如果自己没有定义这样的类目,可以把这几行删掉。

红色的$meta是一个二维数组,第二层数组由两个键组成,meta_name是指要出现在后台分类编辑页面中的名称,而meta_key是保存到数据库中的键值。因此这里是你需要自己定义的,要修改为你自己需要的值。

添加分类页面,可以添加新字段

添加分类页面,可以添加新字段

编辑分类页面,可以编辑这些附加字段

编辑分类页面,可以编辑这些附加字段

最后一个函数get_term_meta是用来获取字段值的,第一个参数是这个类目的id,第二个参数是上面的meta_key。

下面我简单说几句