Adding custom field to product category

后端 未结 2 961
北恋
北恋 2020-11-30 07:39

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 c

相关标签:
2条回答
  • 2020-11-30 08:17

    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
    • Official Doc: product_cat_edit_form_fields
    0 讨论(0)
  • 2020-11-30 08:27

    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

    0 讨论(0)
提交回复
热议问题