wordpress添加分类目录和标签的自定义字段【纯代码版】

2017年12月6日15:04:26 发表评论 23 views

WordPress的分类目录默认只有名称、别名、父节点和描述这几个字段,有时候我们需要给分类目录拓展一些信息,如想添加一个分类封面图、给分类指定keywords和description等等,这个时候我们就得给分类目录添加自定义字段(或者叫自定义栏目)。

wordpress添加分类目录和标签的自定义字段【纯代码版】

全代码实现分类加字段

将下面的PHP代码复制粘贴到你当前主题的 function.php 中即可。

以下代码只给分类目录添加自定义字段,如果需要给标签添加自定义字段,请看文章后面的讲解。

这部分代码包括 4 大块:

  1. 调用WordPress的action;
  2. 新建分类页面添加自定义字段输入框;
  3. 编辑分类页面添加自定义字段输入框;
  4. 保存自定义字段的数据。

这里只创建一个分类封面的URL输入框。如果要添加更多的自定义字段,也只需在代码中几个 TODO 的位置上追加一些代码而已,代码中也给出添加keywords字段的示例。

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

  1. <?php
  2. class Ludou_Tax_Image{
  3.     function __construct(){
  4.         // 新建分类页面添加自定义字段输入框
  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();

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

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

全代码实现标签加字段

给标签添加自定义字段的原理是一样的,只需把上面第一部分代码中的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 );

本文由大标seo整理发布《wordpress添加分类目录和标签的自定义字段【纯代码版】》,欢迎分享,转载请注明来源:https://www.dabiaoseo.com/156.html

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: