西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > wordpress教程 >

非插件实现wordpress分类目录和标签添加新的自定义字段

时间:2016-01-29 17:50来源:未知 作者:好模板 点击:
WordPress的分类目录默认只有名称、别名、父节点和描述这几个字段,有时候我们需要给分类目录拓展一些信息,如想添加一个分类封面图、给分类指定keywords和description等等,这个时候我

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

下图是WordPress后台的分类目录编辑页面,有心的读者可能注意到,这里多了个分类封面的输入框,这个就是我们所说的给分类目录添加的自定义字段。

cattag

 

分类加字段

将下面的PHP代码复制粘贴到你当前主题的 function.php 中即可。以下代码只给分类目录添加自定义字段,如果需要给标签添加自定义字段,请看文章后面的讲解。

这部分代码包括 4 大块:调用WordPress的action;新建分类页面添加自定义字段输入框;编辑分类页面添加自定义字段输入框;保存自定义字段的数据。这里只创建一个分类封面的URL输入框。如果要添加更多的自定义字段,也只需在代码中几个 TODO 的位置上追加一些代码而已,代码中也给出添加keywords字段的示例。

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


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

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


  1. // $term_id 是当前分类的id,自行想办法获取
  2. $term_id = $term->term_id;
  3.  
  4. // 获取已保存的option
  5. $term_meta = get_option( "ludou_taxonomy_$term_id" );
  6.  
  7. // 取值
  8. $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. // 保存自定义字段数据
  7. add_action( 'edited_category', array( $this, 'save_tax_meta' ), 10, 2 );
  8. 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.  
  5. add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );
  6. 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. // 标签
  8. add_action( 'post_tag_add_form_fields', array( $this, 'add_tax_image_field' ) );
  9. add_action( 'post_tag_edit_form_fields', array( $this, 'edit_tax_image_field' ) );
  10. add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );
  11. add_action( 'create_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );
  12.  
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容