Search code examples
wordpresswoocommercewordpress-admin

How to get values of product category custom meta field in admin single product edit page?


With the following code i added a custom meta field to a product category

    function custom_product_taxonomy_add_new_meta_field() {
        // this will add the custom meta field to the add new term page
        ?>
        <div class="form-field">
            <label for="term_meta[custom_term_meta]"><?php _e( 'Short form', 'woocommerce' ); ?></label>
            <input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value="">
            <p class="description"><?php _e( 'Enter a value for this field','woocommerce' ); ?></p>
        </div>
    <?php
    }
    add_action( 'product_cat_add_form_fields', 'custom_product_taxonomy_add_new_meta_field', 10, 2 );

    // Edit term page
    function custom_product_taxonomy_edit_meta_field($term) {

        // put the term ID into a variable
        $t_id = $term->term_id;

        // retrieve the existing value(s) for this meta field. This returns an array
        $term_meta = get_option( "taxonomy_$t_id" ); ?>
        <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[custom_term_meta]"><?php _e( 'Short form', 'woocommerce' ); ?></label></th>
            <td>
                <input type="text" name="term_meta[custom_term_meta]" id="term_meta[custom_term_meta]" value="<?php echo esc_attr( $term_meta['custom_term_meta'] ) ? esc_attr( $term_meta['custom_term_meta'] ) : ''; ?>">
                <p class="description"><?php _e( 'Enter a value for this field','woocommerce' ); ?></p>
            </td>
        </tr>
    <?php
    }
    add_action( 'product_cat_edit_form_fields', 'custom_product_taxonomy_edit_meta_field', 10, 2 );
    // Save extra taxonomy fields callback function.
    function save_taxonomy_custom_meta( $term_id ) {
        if ( isset( $_POST['term_meta'] ) ) {
            $t_id = $term_id;
            $term_meta = get_option( "taxonomy_$t_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_$t_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 );

Any idea how to populate a select option dropdown like the following example with the custom meta value & category name for all cargeories if the parent category has the ID 33 in the product edit page? I only miss the custom meta value part - seems the category names working fine.

    <?php // Populate Dropdown with Brand from Parent Category with ID 33 ?>
    <?php
        $args = array(
            'orderby' => 'name',
            'order' => 'ASC',
            'hide_empty' => 0,
            'taxonomy' => 'product_cat',
            'parent' => '33'
        );

        $categories = get_categories($args);

        foreach($categories as $cat) {                      

        ?>
        <option value="<?php echo $cat->name; ?>" ><?php echo $cat->CUSTOM-META???; ?></option>
        <?php

        }
    ?>  

Solution

  • To get custom meta value of the given category you can use get_term_meta function.

    <option value="<?php echo $cat->name; ?>" >
    <?php echo get_term_meta($cat->term_id,'custom_term_meta',true); ?>
    </option>