WordPress的分类目录默许只要称号、别号、父节点和形貌这几个字段,有时刻我们须要给分类目录拓展一些信息,如想增加一个分类封面图、给分类指定keywords和description等等,这个时刻我们就得给分类目录增加自定义字段(或许叫自定义栏目)。本文将给你引见怎样给WordPress的分类目录和标签增加新的自定义字段。
wordpress 给分类目录加自定义字段 SEO建站

下图是WordPress背景的分类目录编辑页面,故意的读者大概注意到,这里多了个分类封面的输入框,这个就是我们所说的给分类目录增加的自定义字段。

插件完成

本文引见的重点不是插件,然则假如你不会写代码,或许喜好更轻易的插件,引荐下面几款插件:

  • LSD Custom taxonomy and category meta

  • Custom taxonomy meta

  • Category Meta plugin

  • Category Thumbnails (该插件只能完成增加分类封面的结果)

全代码完成分类加字段

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

这部份代码包含 4 大块:挪用WordPress的action;新建分类页面增加自定义字段输入框;编辑分类页面增加自定义字段输入框;保留自定义字段的数据。这里只建立一个分类封面的URL输入框。假如要增加更多的自定义字段,也只需在代码中几个 TODO 的位置上追加一些代码罢了,代码中也给出增加keywords字段的示例。

一切自定义字段保留在WordPress的_options表中,无需建新的表。

  1. <?php  

  2.   

  3. class Ludou_Tax_Image{  

  4.    

  5.     function __construct(){  

  6.           

  7.         // 新建分类页面增加自定义字段输入框  

  8.         add_action( 'category_add_form_fields', array( $this, 'add_tax_image_field' ) );  

  9.         // 编辑分类页面增加自定义字段输入框  

  10.         add_action( 'category_edit_form_fields', array( $this, 'edit_tax_image_field' ) );  

  11.   

  12.         // 保留自定义字段数据  

  13.         add_action( 'edited_category', array( $this, 'save_tax_meta' ), 10, 2 );  

  14.         add_action( 'create_category', array( $this, 'save_tax_meta' ), 10, 2 );  

  15.    

  16.    

  17.     } // __construct  

  18.    

  19.     /** 

  20.      * 新建分类页面增加自定义字段输入框 

  21.      */  

  22.     public function add_tax_image_field(){  

  23.     ?>  

  24.         <div class="form-field">  

  25.             <label for="term_meta[tax_image]">分类封面</label>  

  26.             <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="" />  

  27.             <p class="description">输入分类封面图片URL</p>  

  28.         </div><!-- /.form-field -->  

  29.           

  30.         <!-- TODO: 在这里追加其他自定义字段表单,如: -->  

  31.           

  32.         <!--  

  33.         <div class="form-field">  

  34.             <label for="term_meta[tax_keywords]">分类关键字</label>  

  35.             <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="" />  

  36.             <p class="description">输入分类关键字</p>  

  37.         </div>  

  38.         -->  

  39.     <?php  

  40.     } // add_tax_image_field  

  41.    

  42.     /** 

  43.      * 编辑分类页面增加自定义字段输入框 

  44.      * 

  45.      * @uses get_option()       从option表中猎取option数据 

  46.      * @uses esc_url()          确保字符串是url 

  47.      */  

  48.     public function edit_tax_image_field( $term ){  

  49.           

  50.         // $term_id 是当前分类的id  

  51.         $term_id = $term->term_id;  

  52.           

  53.         // 猎取已保留的option  

  54.         $term_meta = get_option( "ludou_taxonomy_$term_id" );  

  55.         // option是一个二维数组  

  56.         $image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';  

  57.           

  58.         /** 

  59.          *   TODO: 在这里追加猎取其他自定义字段值,如: 

  60.          *   $keywords = $term_meta['tax_keywords'] ? $term_meta['tax_keywords'] : ''; 

  61.          */  

  62.     ?>  

  63.         <tr class="form-field">  

  64.             <th scope="row">  

  65.                 <label for="term_meta[tax_image]">分类封面</label>  

  66.                 <td>  

  67.                     <input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="<?php echo esc_url( $image ); ?>" />  

  68.                     <p class="description">输入分类封面图片URL</p>  

  69.                 </td>  

  70.             </th>  

  71.         </tr><!-- /.form-field -->  

  72.           

  73.         <!-- TODO: 在这里追加其他自定义字段表单,如: -->  

  74.           

  75.         <!--  

  76.         <tr class="form-field">  

  77.             <th scope="row">  

  78.                 <label for="term_meta[tax_keywords]">分类关键字</label>  

  79.                 <td>  

  80.                     <input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="<?php echo $keywords; ?>" />  

  81.                     <p class="description">输入分类关键字</p>  

  82.                 </td>  

  83.             </th>  

  84.         </tr>  

  85.         -->  

  86.           

  87.     <?php  

  88.     } // edit_tax_image_field  

  89.    

  90.     /** 

  91.      * 保留自定义字段的数据 

  92.      * 

  93.      * @uses get_option()      从option表中猎取option数据 

  94.      * @uses update_option()   更新option数据,假如没有就新建option 

  95.      */  

  96.     public function save_tax_meta( $term_id ){  

  97.    

  98.         if ( isset( $_POST['term_meta'] ) ) {  

  99.               

  100.             // $term_id 是当前分类的id  

  101.             $t_id = $term_id;  

  102.             $term_meta = array();  

  103.               

  104.             // 猎取表单传过来的POST数据,POST数组肯定要做过滤  

  105.             $term_meta['tax_image'] = isset ( $_POST['term_meta']['tax_image'] ) ? esc_url( $_POST['term_meta']['tax_image'] ) : '';  

  106.   

  107.             /** 

  108.              *   TODO: 在这里追加猎取其他自定义字段表单的值,如: 

  109.              *   $term_meta['tax_keywords'] = isset ( $_POST['term_meta']['tax_keywords'] ) ? $_POST['term_meta']['tax_keywords'] : ''; 

  110.              */  

  111.   

  112.             // 保留option数组  

  113.             update_option( "ludou_taxonomy_$t_id", $term_meta );  

  114.    

  115.         } // if isset( $_POST['term_meta'] )  

  116.     } // save_tax_meta  

  117.    

  118. } // Ludou_Tax_Image  

  119.    

  120. $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. // 标签  

  9. add_action( 'post_tag_add_form_fields', array( $this, 'add_tax_image_field' ) );  

  10. add_action( 'post_tag_edit_form_fields', array( $this, 'edit_tax_image_field' ) );  

  11. add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );  

  12. add_action( 'create_post_tag', array( $this, 'save_tax_meta' ), 10, 2 );