也想出現在這里?聯系我們

wordpress 給分類目錄加自定義字段

  • 文章介紹
  • 升級版本
  • 評價&建議

WordPress的分類目錄默認只有名稱、別名、父節點和描述這幾個字段,有時候我們需要給分類目錄拓展一些信息,如想添加一個分類封面圖、給分類指定keywords和description等等,這個時候我們就得給分類目錄添加自定義字段(或者叫自定義欄目)。本文將給你介紹如何給WordPress的分類目錄和標簽添加新的自定義字段。
cattag

下圖是WordPress后臺的分類目錄編輯頁面,有心的讀者可能注意到,這里多了個分類封面的輸入框,這個就是我們所說的給分類目錄添加的自定義字段。

插件實現

本文介紹的重點不是插件,但是如果你不會寫代碼,或者喜歡更方便的插件,推薦下面幾款插件:

全代碼實現分類加字段

將下面的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 );  
有用4
  • 2016.11.26初次和大家見面了!

等待您對該主題的建議

發表評論

還能輸入240個字

Hi, 歡迎加入Wordpress技術交流群,帶你裝逼帶你飛!

我要入群
也想出現在這里?聯系我們
wordpress加速

我來推薦一個更牛逼的給你看看?

  • 猛戳我吧
夫妇野外交换HD高清版,免费A片在线观看,亚洲精品国产自在现线,中国老妇人60OLDMANTV