Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding custom field to product category

Tags:

How can I add custom fields to product category? I have added custom field to product but I can't find any extension which provide facility to add custom field to product category.

like image 676
Vidhi Avatar asked May 05 '14 10:05

Vidhi


2 Answers

You can add custom fields to WooCommerce product category by using following action :

  • product_cat_add_form_fields
  • product_cat_edit_form_fields
  • edited_product_cat
  • create_product_cat

UPDATED on 17-Feb-2017 ###For WP version 4.4 and above.
As of WordPress 4.4, update_term_meta() and get_term_meta() functions have been added. This means that now we don't have to save the data in wp_options table anymore, rather they are now stored in wp_termmeta table.

Here is my updated code.

//Product Cat Create page function wh_taxonomy_add_new_meta_field() {     ?>              <div class="form-field">         <label for="wh_meta_title"><?php _e('Meta Title', 'wh'); ?></label>         <input type="text" name="wh_meta_title" id="wh_meta_title">         <p class="description"><?php _e('Enter a meta title, <= 60 character', 'wh'); ?></p>     </div>     <div class="form-field">         <label for="wh_meta_desc"><?php _e('Meta Description', 'wh'); ?></label>         <textarea name="wh_meta_desc" id="wh_meta_desc"></textarea>         <p class="description"><?php _e('Enter a meta description, <= 160 character', 'wh'); ?></p>     </div>     <?php }  //Product Cat Edit page function wh_taxonomy_edit_meta_field($term) {      //getting term ID     $term_id = $term->term_id;      // retrieve the existing value(s) for this meta field.     $wh_meta_title = get_term_meta($term_id, 'wh_meta_title', true);     $wh_meta_desc = get_term_meta($term_id, 'wh_meta_desc', true);     ?>     <tr class="form-field">         <th scope="row" valign="top"><label for="wh_meta_title"><?php _e('Meta Title', 'wh'); ?></label></th>         <td>             <input type="text" name="wh_meta_title" id="wh_meta_title" value="<?php echo esc_attr($wh_meta_title) ? esc_attr($wh_meta_title) : ''; ?>">             <p class="description"><?php _e('Enter a meta title, <= 60 character', 'wh'); ?></p>         </td>     </tr>     <tr class="form-field">         <th scope="row" valign="top"><label for="wh_meta_desc"><?php _e('Meta Description', 'wh'); ?></label></th>         <td>             <textarea name="wh_meta_desc" id="wh_meta_desc"><?php echo esc_attr($wh_meta_desc) ? esc_attr($wh_meta_desc) : ''; ?></textarea>             <p class="description"><?php _e('Enter a meta description', 'wh'); ?></p>         </td>     </tr>     <?php }  add_action('product_cat_add_form_fields', 'wh_taxonomy_add_new_meta_field', 10, 1); add_action('product_cat_edit_form_fields', 'wh_taxonomy_edit_meta_field', 10, 1);  // Save extra taxonomy fields callback function. function wh_save_taxonomy_custom_meta($term_id) {      $wh_meta_title = filter_input(INPUT_POST, 'wh_meta_title');     $wh_meta_desc = filter_input(INPUT_POST, 'wh_meta_desc');      update_term_meta($term_id, 'wh_meta_title', $wh_meta_title);     update_term_meta($term_id, 'wh_meta_desc', $wh_meta_desc); }  add_action('edited_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1); add_action('create_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1); 

USAGE, to retrive data:

echo $productCatMetaTitle = get_term_meta($term_id, 'wh_meta_title', true); echo $productCatMetaDesc = get_term_meta($term_id, 'wh_meta_desc', true); 

###For WP version below `4.4`.

Here is the code

//Product Cat creation page function text_domain_taxonomy_add_new_meta_field() {     ?>     <div class="form-field">         <label for="term_meta[wh_meta_title]"><?php _e('Meta Title', 'text_domain'); ?></label>         <input type="text" name="term_meta[wh_meta_title]" id="term_meta[wh_meta_title]">         <p class="description"><?php _e('Enter a meta title, <= 60 character', 'text_domain'); ?></p>     </div>     <div class="form-field">         <label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'text_domain'); ?></label>         <textarea name="term_meta[wh_meta_desc]" id="term_meta[wh_meta_desc]"></textarea>         <p class="description"><?php _e('Enter a meta description, <= 160 character', 'text_domain'); ?></p>     </div>     <?php }  add_action('product_cat_add_form_fields', 'text_domain_taxonomy_add_new_meta_field', 10, 2);  //Product Cat Edit page function text_domain_taxonomy_edit_meta_field($term) {      //getting term ID     $term_id = $term->term_id;      // retrieve the existing value(s) for this meta field. This returns an array     $term_meta = get_option("taxonomy_" . $term_id);     ?>     <tr class="form-field">         <th scope="row" valign="top"><label for="term_meta[wh_meta_title]"><?php _e('Meta Title', 'text_domain'); ?></label></th>         <td>             <input type="text" name="term_meta[wh_meta_title]" id="term_meta[wh_meta_title]" value="<?php echo esc_attr($term_meta['wh_meta_title']) ? esc_attr($term_meta['wh_meta_title']) : ''; ?>">             <p class="description"><?php _e('Enter a meta title, <= 60 character', 'text_domain'); ?></p>         </td>     </tr>     <tr class="form-field">         <th scope="row" valign="top"><label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'text_domain'); ?></label></th>         <td>             <textarea name="term_meta[wh_meta_desc]" id="term_meta[wh_meta_desc]"><?php echo esc_attr($term_meta['wh_meta_desc']) ? esc_attr($term_meta['wh_meta_title']) : ''; ?></textarea>             <p class="description"><?php _e('Enter a meta description', 'text_domain'); ?></p>         </td>     </tr>     <?php }  add_action('product_cat_edit_form_fields', 'text_domain_taxonomy_edit_meta_field', 10, 2);  // Save extra taxonomy fields callback function. function save_taxonomy_custom_meta($term_id) {     if (isset($_POST['term_meta'])) {         $term_meta = get_option("taxonomy_" . $term_id);         $cat_keys = array_keys($_POST['term_meta']);         foreach ($cat_keys as $key) {             if (isset($_POST['term_meta'][$key])) {                 $term_meta[$key] = $_POST['term_meta'][$key];             }         }         // Save the option array.         update_option("taxonomy_" . $term_id, $term_meta);     } }  add_action('edited_product_cat', 'save_taxonomy_custom_meta', 10, 2); add_action('create_product_cat', 'save_taxonomy_custom_meta', 10, 2); 

USAGE, to retrive data:

$metaArray = get_option('taxonomy_' . $term_id); echo $productCatMetaTitle = $metaArray['wh_meta_title']; echo $productCatMetaDesc = $metaArray['wh_meta_desc'];      

This code goes in function.php file of your active child theme (or theme) or also in any plugin file.

All code is tested, and fully functional.


Reference

  • Tutorial: Adding Custom Fields to WooCommerce Product Category
  • Doc: product_cat_edit_form_fields

Official Doc:

like image 107
Raunak Gupta Avatar answered Jan 03 '23 11:01

Raunak Gupta


Starting Wordpress 4.4 you should consider waiting for an upgrade of Woocommerce or starting feeding manually the new wp_termmeta table.

https://core.trac.wordpress.org/ticket/10142

like image 29
snowflake Avatar answered Jan 03 '23 11:01

snowflake