现在的位置:首页>wordpress>正文

WordPress在后台给分类目录和标签添加自定义(栏目)字段

2016年09月19日 ⁄ 共 5435字 评论 2 条

WordPress在默认的情况下,我们可以对page页面和文章页面加新的自定义字段,也就是我们常说的自定义栏目,但像分类目录和标签,默认情况下,是无法添加的,而如果能在这两个类目下加入自定义字段的话,显然还是很有些用处的,比如部落前天介绍的wordpress给文章和分页,标签等页面设置关健词和描述增强板这篇文章,就是通过自定义栏目来操作的,另外,像有时候,我们可能会要给分类目录拓展一些信息,如想添加一个分类封面图等,就能用得上这个功能了.

那些在关健词和描述使用All in One SEO Pack的,到这里就是真的基本所有类目均可设置了.

默认的情况下,这些功能都是不能直接添加的,我们需要添加相应的代码,当然,像这一类的插件也是有的,比如:

LSD Custom taxonomy and category meta

Custom taxonomy meta

Category Meta plugin

Category Thumbnails 这里部落备注一下,据说该插件只能实现添加分类封面的效果.

大家如果图简单,可以下载安装一个插件.

正常情况下,例如部落打开自己的站点,在分类页面上能看到如下图:

WordPress在后台给分类目录和标签添加自定义(栏目)字段

下面是无法加入自定义字段的.

WordPress在后台给分类目录添加自定义(栏目)字段

其实用代码来实现这个功能,也是非常简单的.将下面的PHP代码复制粘贴到你当前主题的 function.php 中即可.

  1. <?php
  2. class Ludou_Tax_Image{
  3. function __construct(){
  4. // 新建分类页面添加自定义字段输入框 from www.mfbuluo.com
  5.  add_action( 'category_add_form_fields', array$this, 'add_tax_image_field' ) );
  6. // 编辑分类页面添加自定义字段输入框
  7.  add_action( 'category_edit_form_fields', array$this, 'edit_tax_image_field' ) );
  8. // 保存自定义字段数据
  9.  add_action( 'edited_category', array$this, 'save_tax_meta' ), 10, 2 );
  10.  add_action( 'create_category', array$this, 'save_tax_meta' ), 10, 2 );
  11. // __construct
  12. /**
  13.  * 新建分类页面添加自定义字段输入框
  14.  */
  15.  public function add_tax_image_field(){
  16.  ?>
  17.  <div class="form-field">
  18.  <label for="term_meta[tax_image]">分类封面</label>
  19.  <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="" />
  20.  <p class="description">输入分类封面图片URL</p>
  21.  </div><!-- /.form-field -->
  22. <!-- TODO: 在这里追加其他自定义字段表单,如: -->
  23. <!--
  24.  <div class="form-field">
  25.  <label for="term_meta[tax_keywords]">分类关键字</label>
  26.  <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="" />
  27.  <p class="description">输入分类关键字</p>
  28.  </div>
  29.  -->
  30.  <?php
  31.  } // add_tax_image_field
  32. /**
  33.  * 编辑分类页面添加自定义字段输入框
  34.  *
  35.  * @uses get_option() 从option表中获取option数据
  36.  * @uses esc_url() 确保字符串是url
  37.  */
  38.  public function edit_tax_image_field( $term ){
  39. // $term_id 是当前分类的id
  40.  $term_id = $term->term_id;
  41. // 获取已保存的option
  42.  $term_meta = get_option( "ludou_taxonomy_$term_id" );
  43.  // option是一个二维数组
  44.  $image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';
  45. /**
  46.  * TODO: 在这里追加获取其他自定义字段值,如:
  47.  * $keywords = $term_meta['tax_keywords'] ? $term_meta['tax_keywords'] : '';
  48.  */
  49.  ?>
  50.  <tr class="form-field">
  51.  <th scope="row">
  52.  <label for="term_meta[tax_image]">分类封面</label>
  53.  <td>
  54.  <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="<?php echo esc_url( $image ); ?>" />
  55.  <p class="description">输入分类封面图片URL</p>
  56.  </td>
  57.  </th>
  58.  </tr><!-- /.form-field -->
  59. <!-- TODO: 在这里追加其他自定义字段表单,如: -->
  60. <!--
  61.  <tr class="form-field">
  62.  <th scope="row">
  63.  <label for="term_meta[tax_keywords]">分类关键字</label>
  64.  <td>
  65.  <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="<?php echo $keywords; ?>" />
  66.  <p class="description">输入分类关键字</p>
  67.  </td>
  68.  </th>
  69.  </tr>
  70.  -->
  71. <?php
  72.  } // edit_tax_image_field
  73. /**
  74.  * 保存自定义字段的数据
  75.  *
  76.  * @uses get_option() 从option表中获取option数据
  77.  * @uses update_option() 更新option数据,如果没有就新建option
  78.  */
  79.  public function save_tax_meta( $term_id ){
  80. if ( isset( $_POST['term_meta'] ) ) {
  81. // $term_id 是当前分类的id
  82.  $t_id = $term_id;
  83.  $term_meta = array();
  84. // 获取表单传过来的POST数据,POST数组一定要做过滤
  85.  $term_meta['tax_image'] = isset ( $_POST['term_meta']['tax_image'] ) ? esc_url( $_POST['term_meta']['tax_image'] ) : '';
  86. /**
  87.  * TODO: 在这里追加获取其他自定义字段表单的值,如:
  88.  * $term_meta['tax_keywords'] = isset ( $_POST['term_meta']['tax_keywords'] ) ? $_POST['term_meta']['tax_keywords'] : '';
  89.  */
  90. // 保存option数组
  91.  update_option( "ludou_taxonomy_$t_id"$term_meta );
  92. // if isset( $_POST['term_meta'] )
  93.  } // save_tax_meta
  94. // Ludou_Tax_Image
  95. $wptt_tax_image = new Ludou_Tax_Image();

这里解释一下,我们是调用WordPress的action;新建分类页面添加自定义字段输入框;编辑分类页面添加自定义字段输入框;保存自定义字段的数据。这里只创建一个分类封面的URL输入框.

如果要添加更多的自定义字段,也只需在代码中几个 TODO 的位置上追加一些代码而已,代码中也给出添加keywords字段的示例.

所有自定义字段保存在WordPress的_options表中,无需建新的表.

WordPress在后台给分类目录添加自定义(栏目)字段

和前面的差不多.只需把上面第一部分代码中的action修改一下即可,将以上代码中的:

  1. // 新建分类页面添加自定义字段输入框
  2.  add_action( 'category_add_form_fields', array$this, 'add_tax_image_field' ) );
  3. // 编辑分类页面添加自定义字段输入框
  4.  add_action( 'category_edit_form_fields', array$this, 'edit_tax_image_field' ) );
  5. // 保存自定义字段数据
  6.  add_action( 'edited_category', array$this, 'save_tax_meta' ), 10, 2 );
  7.  add_action( 'create_category', array$this, 'save_tax_meta' ), 10, 2 );

改成:

  1. // 其实就是把 category 改成 post_tag 即可
  2. add_action( 'post_tag_add_form_fields', array$this, 'add_tax_image_field' ) );
  3. add_action( 'post_tag_edit_form_fields', array$this, 'edit_tax_image_field' ) );
  4. add_action( 'edited_post_tag', array$this, 'save_tax_meta' ), 10, 2 );
  5. add_action( 'create_post_tag', array$this, 'save_tax_meta' ), 10, 2 );

如果分类和标签都需要添加的话,可以直接加入下面的代码:

  1. // 分类
  2. add_action( 'category_add_form_fields', array$this, 'add_tax_image_field' ) );
  3. add_action( 'category_edit_form_fields', array$this, 'edit_tax_image_field' ) );
  4. add_action( 'edited_category', array$this, 'save_tax_meta' ), 10, 2 );
  5. add_action( 'create_category', array$this, 'save_tax_meta' ), 10, 2 );
  6. // 标签
  7. add_action( 'post_tag_add_form_fields', array$this, 'add_tax_image_field' ) );
  8. add_action( 'post_tag_edit_form_fields', array$this, 'edit_tax_image_field' ) );
  9. add_action( 'edited_post_tag', array$this, 'save_tax_meta' ), 10, 2 );
  10. add_action( 'create_post_tag', array$this, 'save_tax_meta' ), 10, 2 );

调用分类自定义字段的值

如果需要在主题中调用分类自定义字段的值,可以使用以下代码:

  1. // $term_id 是当前分类的id,自行想办法获取
  2. $term_id = $term-&gt;term_id;
  3. // 获取已保存的option from www.mfbuluo.com
  4. $term_meta = get_option( "ludou_taxonomy_$term_id" );
  5. // 取值
  6. $tax_image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';

好了,到此,我们就能够在后台给分类目录和标签添加自定义(栏目)字段.

小结

文章中的方法来源自网络,由免费部落整理发布.

部落目前还没有使用这个功能,实话说,如果只是为设置关健词和描述的话,没有必要去这样搞,因为我们还可以通过别名等方式来实现,当然,如果您需要分类封面图这样的功能,就可以试一下了.

评论 2 条 评论内容很精采,有内幕,而且绝对有干货

  1. 我爱动感单车网 2016年09月19日 10:18  @回复  Δ-49楼 回复

    实在有点看不明白这些,感觉挺复杂的!

  2. 旭旭博客 2016年09月21日 23:09  @回复  Δ-48楼 回复

    介绍的很详细,存书签了 以后用的时候看

给我留言